main_interface.cpp 19.3 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 );

54
55
56
57
58
59
60
61
#define VISIBLE(i) (i && i->isVisible())

#define SET_WIDTH(i,j) i->widgetSize.setWidth(j)
#define SET_HEIGHT(i,j) i->widgetSize.setHeight(j)
#define SET_WH( i,j,k) i->widgetSize.setWidth(j); i->widgetSize.setHeight(k);

#define DS(i) i.width(),i.height()

zorglub's avatar
zorglub committed
62
63
static int InteractCallback( vlc_object_t *, const char *, vlc_value_t,
                             vlc_value_t, void *);
64
65
66
67
68
69
70
71
72
73
74
75
76
77
/* 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
78

79
80
bool embeddedPlaylistWasActive;
bool videoIsActive;
81
QSize savedVideoSize;
82

zorglub's avatar
zorglub committed
83
MainInterface::MainInterface( intf_thread_t *_p_intf ) : QVLCMW( _p_intf )
zorglub's avatar
zorglub committed
84
{
85
86
87
    settings = new QSettings( "VideoLAN", "VLC" );
    settings->beginGroup( "MainWindow" );

88
    need_components_update = false;
89
    bgWidget = NULL; videoWidget = NULL; playlistWidget = NULL;
zorglub's avatar
zorglub committed
90
    embeddedPlaylistWasActive = videoIsActive = false;
91

zorglub's avatar
zorglub committed
92
    setWindowTitle( QString::fromUtf8( _("VLC media player") ) );
93
94
95
    handleMainUi( settings );

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

97
98
99
100
101
    /* Status bar */
    timeLabel = new QLabel( 0 );
    nameLabel = new QLabel( 0 );
    statusBar()->addWidget( nameLabel, 4 );
    statusBar()->addPermanentWidget( timeLabel, 1 );
zorglub's avatar
Icons    
zorglub committed
102

103
104
    setFocusPolicy( Qt::StrongFocus );

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
130
    /* 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 ) );

    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 );
131
132
133
134

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

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

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

zorglub's avatar
Cleanup    
zorglub committed
146
    BUTTON_SET( prev, previous.png, qtr( "Previous" ) );
147
    BUTTONACT( ui.prevButton, prev() );
zorglub's avatar
Cleanup    
zorglub committed
148
    BUTTON_SET( next, next.png , qtr( "Next" ) );
149
    BUTTONACT( ui.nextButton, next() );
zorglub's avatar
Cleanup    
zorglub committed
150
    BUTTON_SET( play, play.png , qtr( "Play" ) );
151
    BUTTONACT( ui.playButton, play() );
zorglub's avatar
Cleanup    
zorglub committed
152
    BUTTON_SET( stop, stop.png , qtr( "Stop" )  );
153
    BUTTONACT( ui.stopButton, stop() );
zorglub's avatar
zorglub committed
154

155
156
    BUTTON_SET( visual,  stop.png, qtr( "Audio visualizations" ) );
    BUTTONACT( ui.visualButton, visual() );
157
158

    /* Volume */
159
    ui.volMuteLabel->setPixmap( QPixmap( ":/pixmaps/volume-low.png" ) );
zorglub's avatar
zorglub committed
160
    ui.volumeSlider->setMaximum( 100 );
161
162
163
    ui.volMuteLabel->setToolTip( qtr( "Mute" ) );
    VolumeClickHandler *h = new VolumeClickHandler( p_intf, this );
    ui.volMuteLabel->installEventFilter(h);
zorglub's avatar
zorglub committed
164
165
    ui.volumeSlider->setFocusPolicy( Qt::NoFocus );

166
167
168
169
170
    /* Fetch configuration from settings and vlc config */
    videoEmbeddedFlag = false;
    if( config_GetInt( p_intf, "embedded-video" ) )
        videoEmbeddedFlag = true;

171
172
173
174
    alwaysVideoFlag = false;
    if( videoEmbeddedFlag && config_GetInt( p_intf, "qt-always-video" ))
        alwaysVideoFlag = true;

175
176
    playlistEmbeddedFlag = true;
    /// \todo fetch playlist settings
177

zorglub's avatar
Cleanup    
zorglub committed
178
179
180
    BUTTON_SET( playlist, volume-low.png, playlistEmbeddedFlag ?
                                                qtr( "Show playlist" ) :
                                                qtr( "Open playlist" ) );
181
    BUTTONACT( ui.playlistButton, playlist() );
zorglub's avatar
zorglub committed
182

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

186
    addSize = QSize( ui.vboxLayout->margin() * 2, PREF_H );
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201

    visualSelector = new VisualSelector( p_intf );
    ui.vboxLayout->insertWidget( 0, visualSelector );
    visualSelector->hide();

    if( alwaysVideoFlag )
    {
        bgWidget = new BackgroundWidget( p_intf );
        bgWidget->widgetSize = settings->value( "backgroundSize",
                                                QSize( 200, 200 ) ).toSize();
        bgWidget->resize( bgWidget->widgetSize );
        bgWidget->updateGeometry();
        ui.vboxLayout->insertWidget( 0, bgWidget );
    }

202
    if( videoEmbeddedFlag )
203
    {
204
        videoWidget = new VideoWidget( p_intf );
205
        videoWidget->widgetSize = QSize( 1, 1 );
206
207
208
        videoWidget->resize( videoWidget->widgetSize );
        ui.vboxLayout->insertWidget( 0, videoWidget );

209
210
211
        p_intf->pf_request_window  = ::DoRequest;
        p_intf->pf_release_window  = ::DoRelease;
        p_intf->pf_control_window  = ::DoControl;
212
    }
213
214

    calculateInterfaceSize();
zorglub's avatar
zorglub committed
215
    resize( mainSize );
zorglub's avatar
Icons    
zorglub committed
216

zorglub's avatar
zorglub committed
217
    setMinimumSize( PREF_W, addSize.height() );
zorglub's avatar
zorglub committed
218
219
}

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

    fprintf( stderr, "Setting to %ix%i\n",
                     width + addSize.width() , height + addSize.height() );

    mainSize = QSize( width + addSize.width(), height + addSize.height() );
zorglub's avatar
zorglub committed
256
}
zorglub's avatar
zorglub committed
257

zorglub's avatar
zorglub committed
258
void MainInterface::resizeEvent( QResizeEvent *e )
259
{
260
261
262
    fprintf( stderr, "Resize event to %ix%i\n", DS( e->size() ) );
    videoWidget->widgetSize.setWidth(  e->size().width() - addSize.width() );
    if( videoWidget && videoIsActive && videoWidget->widgetSize.height() > 1 )
263
    {
264
265
266
267
        SET_WH( videoWidget, e->size().width() - addSize.width(),
                             e->size().height()  - addSize.height() );
        videoWidget->updateGeometry();
        fprintf( stderr, "Video set to %ix%i\n", DS( videoWidget->widgetSize) );
268
    }
269
    if( VISIBLE( playlistWidget ) )
270
    {
271
272
273
274
        SET_WH( playlistWidget , e->size().width() - addSize.width(),
                                 e->size().height() - addSize.height() );
        playlistWidget->updateGeometry();
        fprintf( stderr, "PL set to %ix%i\n",DS(playlistWidget->widgetSize ) );
275
    }
276
277
}

278
279
280
281
282
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 );
283
284
285
    if( ret )
    {
        videoIsActive = true;
286
        if( VISIBLE( playlistWidget ) )
287
288
289
290
        {
            embeddedPlaylistWasActive = true;
            playlistWidget->hide();
        }
291
292
        bool bgWasVisible = false;
        if( VISIBLE( bgWidget) )
zorglub's avatar
zorglub committed
293
        {
294
            bgWasVisible = true;
zorglub's avatar
zorglub committed
295
296
            bgWidget->hide();
        }
297
298
299
300
301
302
303
304
305
306
307
        if( THEMIM->getIM()->hasVideo() || !bgWasVisible )
        {
            videoWidget->widgetSize = QSize( *pi_width, *pi_height );
        }
        else /* Background widget available, use its size */
        {
            /* Ok, our visualizations are bad, so don't do this for the moment
             * use the requested size anyway */
            // videoWidget->widgetSize = bgWidget->widgeTSize;
            videoWidget->widgetSize = QSize( *pi_width, *pi_height );
        }
308
309
310
        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 );
317
318
    videoWidget->widgetSize = QSize( 0, 0 );
    videoWidget->resize( videoWidget->widgetSize );
zorglub's avatar
zorglub committed
319

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

325
    videoIsActive = false;
326
    need_components_update = true;
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
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;
}

363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
void MainInterface::visual()
{
    if( !VISIBLE( visualSelector) )
    {
        visualSelector->show();
        if( !THEMIM->getIM()->hasVideo() )
        {
            /* Show the background widget */
        }
    }
    else
    {
        /* Stop any currently running visualization */
        visualSelector->hide();
    }
378
    doComponentsUpdate();
379
380
}

381
382
383
384
385
386
387
void MainInterface::playlist()
{
    // Toggle the playlist dialog
    if( !playlistEmbeddedFlag )
    {
        if( playlistWidget )
        {
388
            /// \todo Destroy it
389
390
391
392
393
394
395
396
397
398
399
        }
        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
400
                                               QSize( 650, 310 ) ).toSize();
401
        playlistWidget->hide();
402
403
    }
    /// Todo, reset its size ?
404
    if( VISIBLE( playlistWidget) )
405
406
407
408
409
    {
        fprintf( stderr, "hiding playlist\n" );
        playlistWidget->hide();
        if( videoIsActive )
        {
410
411
412
            videoWidget->widgetSize = savedVideoSize;
            videoWidget->resize( videoWidget->widgetSize );
            videoWidget->updateGeometry();
413
414
415
416
417
418
419
        }
    }
    else
    {
        fprintf( stderr, "showing playlist\n" );
        playlistWidget->show();
        if( videoIsActive )
420
421
422
423
424
425
        {
            savedVideoSize = videoWidget->widgetSize;
            videoWidget->widgetSize.setHeight( 0 );
            videoWidget->resize( videoWidget->widgetSize );
            videoWidget->updateGeometry();
        }
426
        if( VISIBLE( bgWidget ) ) bgWidget->hide();
427
    }
428
    doComponentsUpdate();
429
430
}

zorglub's avatar
zorglub committed
431
432
/* Video widget cannot do this synchronously as it runs in another thread */
/* Well, could it, actually ? Probably dangerous ... */
433
434
void MainInterface::doComponentsUpdate()
{
435
436
    calculateInterfaceSize();
    resize( mainSize );
437
438
}

439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
void MainInterface::customEvent( QEvent *event )
{
    if( event->type() == PLUndockEvent_Type )
    {
        ui.vboxLayout->removeWidget( playlistWidget );
        playlistWidget = NULL;
        playlistEmbeddedFlag = false;
        doComponentsUpdate();
    }
    else if( event->type() == PLDockEvent_Type )
    {
        PlaylistDialog::killInstance();
        playlistEmbeddedFlag = true;
        playlist();
    }
}

456
457
458
/************************************************************************
 * Other stuff
 ************************************************************************/
459
460
461
void MainInterface::keyPressEvent( QKeyEvent *e )
{
    int i_vlck = 0;
zorglub's avatar
zorglub committed
462
    /* Handle modifiers */
463
464
465
466
467
468
    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
469
470
    /* Look for some special keys */
#define HANDLE( qt, vk ) case Qt::qt : i_vlck |= vk; found = true;break
471
472
    switch( e->key() )
    {
zorglub's avatar
zorglub committed
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
        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 );

499
500
501
    }
    if( !found )
    {
zorglub's avatar
zorglub committed
502
        /* Force lowercase */
503
504
505
506
507
508
509
510
        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 )
    {
511
        var_SetInteger( p_intf->p_libvlc, "key-pressed", i_vlck );
512
513
514
515
516
517
        e->accept();
    }
    else
        e->ignore();
}

zorglub's avatar
zorglub committed
518
519
void MainInterface::stop()
{
520
    playlist_Stop( THEPL );
zorglub's avatar
zorglub committed
521
522
523
}
void MainInterface::play()
{
524
525
526
527
528
529
530
531
    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
532
533
534
}
void MainInterface::prev()
{
535
    playlist_Prev( THEPL );
zorglub's avatar
zorglub committed
536
537
538
}
void MainInterface::next()
{
539
    playlist_Next( THEPL );
zorglub's avatar
zorglub committed
540
541
542
543
544
545
546
547
548
}

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 );
549
    timeLabel->setText( " "+title+" " );
zorglub's avatar
zorglub committed
550
551
552
553
}

void MainInterface::setName( QString name )
{
554
    nameLabel->setText( " " + name+" " );
zorglub's avatar
zorglub committed
555
556
}

557
558
void MainInterface::setStatus( int status )
{
zorglub's avatar
zorglub committed
559
    if( status == 1 ) // Playing
560
561
562
563
564
        ui.playButton->setIcon( QIcon( ":/pixmaps/pause.png" ) );
    else
        ui.playButton->setIcon( QIcon( ":/pixmaps/play.png" ) );
}

zorglub's avatar
zorglub committed
565
566
static bool b_my_volume;

zorglub's avatar
zorglub committed
567
568
void MainInterface::updateOnTimer()
{
zorglub's avatar
zorglub committed
569
570
    if( p_intf->b_die )
    {
zorglub's avatar
zorglub committed
571
572
        QApplication::closeAllWindows();
        DialogsProvider::killInstance();
zorglub's avatar
zorglub committed
573
574
        QApplication::quit();
    }
575
576
577
578
579
580
    if( need_components_update )
    {
        doComponentsUpdate();
        need_components_update = false;
    }

zorglub's avatar
zorglub committed
581
582
583
584
585
586
587
588
589
590
591
    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
592
593
594
595
596
597
}

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

zorglub's avatar
zorglub committed
600
601
602
603
604
605
606
607
608
609
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
610
611
612
613
614
615
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
616

zorglub's avatar
zorglub committed
617
618
    MainInterface *p_interface = (MainInterface*)param;
    DialogEvent *event = new DialogEvent( INTF_DIALOG_INTERACTION, 0, p_arg );
619
    QApplication::postEvent( THEDP, static_cast<QEvent*>(event) );
zorglub's avatar
zorglub committed
620
621
    return VLC_SUCCESS;
}