main_interface.cpp 19.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"
28
#include "util/customwidgets.hpp"
zorglub's avatar
zorglub committed
29
#include "dialogs_provider.hpp"
30
#include "components/interface_widgets.hpp"
31
32
33
#include "dialogs/playlist.hpp"
#include "menus.hpp"

zorglub's avatar
zorglub committed
34
#include <QMenuBar>
zorglub's avatar
zorglub committed
35
#include <QCloseEvent>
zorglub's avatar
zorglub committed
36
#include <QPushButton>
zorglub's avatar
zorglub committed
37
#include <QStatusBar>
38
#include <QKeyEvent>
zorglub's avatar
zorglub committed
39
#include <QUrl>
40
41

#include <assert.h>
42
#include <vlc_keys.h>
43
#include <vlc/vout.h>
zorglub's avatar
zorglub committed
44
#include <aout_internal.h>
zorglub's avatar
zorglub committed
45

zorglub's avatar
zorglub committed
46
#ifdef WIN32
zorglub's avatar
zorglub committed
47
    #define PREF_W 410
zorglub's avatar
zorglub committed
48
49
    #define PREF_H 121
#else
zorglub's avatar
zorglub committed
50
    #define PREF_W 450
zorglub's avatar
zorglub committed
51
52
    #define PREF_H 125
#endif
zorglub's avatar
zorglub committed
53

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" );

zorglub's avatar
zorglub committed
88
89
    setAcceptDrops(true);

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

zorglub's avatar
zorglub committed
94
95
96
97
98
99
100
101
102
103
104
105
    /* Fetch configuration from settings and vlc config */
    videoEmbeddedFlag = false;
    if( config_GetInt( p_intf, "embedded-video" ) )
        videoEmbeddedFlag = true;

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

    playlistEmbeddedFlag = settings->value( "playlist-embedded", true ).
                                                                    toBool();
    advControlsEnabled= settings->value( "adv-controls", false ).toBool();
106
    visualSelectorEnabled= settings->value( "visual-selector", false ).toBool();
zorglub's avatar
zorglub committed
107

zorglub's avatar
zorglub committed
108
    setWindowTitle( QString::fromUtf8( _("VLC media player") ) );
109
110
    handleMainUi( settings );

zorglub's avatar
zorglub committed
111
    QVLCMenu::createMenuBar( this, p_intf, playlistEmbeddedFlag,
112
                             advControlsEnabled, visualSelectorEnabled );
zorglub's avatar
zorglub committed
113

114
115
116
117
118
    /* Status bar */
    timeLabel = new QLabel( 0 );
    nameLabel = new QLabel( 0 );
    statusBar()->addWidget( nameLabel, 4 );
    statusBar()->addPermanentWidget( timeLabel, 1 );
zorglub's avatar
Icons    
zorglub committed
119

120
121
    setFocusPolicy( Qt::StrongFocus );

122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
    /* 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;
}

zorglub's avatar
zorglub committed
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
void MainInterface::dropEvent(QDropEvent *event)
{
     const QMimeData *mimeData = event->mimeData();

     /* D&D of a subtitles file, add it on the fly */
     if( mimeData->urls().size() == 1 )
     {
        if( THEMIM->getIM()->hasInput() )
        {
            if( input_AddSubtitles( THEMIM->getInput(),
                                    qtu( mimeData->urls()[0].toString() ),
                                    VLC_TRUE ) )
            {
                event->acceptProposedAction();
                return;
            }
        }
     }
     bool first = true;
     foreach( QUrl url, mimeData->urls() ) {
        QString s = url.toString();
        if( s.length() > 0 ) {
            playlist_PlaylistAdd( THEPL, qtu(s), NULL,
                                  PLAYLIST_APPEND | (first ? PLAYLIST_GO:0),
                                  PLAYLIST_END );
            first = false;
        }
     }
     event->acceptProposedAction();
}
void MainInterface::dragEnterEvent(QDragEnterEvent *event)
{
     event->acceptProposedAction();
}
void MainInterface::dragMoveEvent(QDragMoveEvent *event)
{
     event->acceptProposedAction();
}
void MainInterface::dragLeaveEvent(QDragLeaveEvent *event)
{
     event->accept();
}



188
189
MainInterface::~MainInterface()
{
zorglub's avatar
zorglub committed
190
191
192
193
194
    settings->setValue( "playlist-embedded", playlistEmbeddedFlag );
    settings->setValue( "adv-controls", advControlsEnabled );
    settings->setValue( "pos", pos() );
    settings->endGroup();
    delete settings;
195
196
    p_intf->b_interaction = VLC_FALSE;
    var_DelCallback( p_intf, "interaction", InteractCallback, this );
197
198
199
200

    p_intf->pf_request_window = NULL;
    p_intf->pf_release_window = NULL;
    p_intf->pf_control_window = NULL;
201
202
203
204
205
206
207
208
}

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

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

zorglub's avatar
zorglub committed
212
213
214
215
216
    BUTTON_SET_ACT_I( ui.prevButton, "" , previous.png,
                      qtr("Previous"), prev() );
    BUTTON_SET_ACT_I( ui.nextButton, "", next.png, qtr("Next"), next() );
    BUTTON_SET_ACT_I( ui.playButton, "", play.png, qtr("Play"), play() );
    BUTTON_SET_ACT_I( ui.stopButton, "", stop.png, qtr("Stop"), stop() );
217
218

    /* Volume */
219
    ui.volMuteLabel->setPixmap( QPixmap( ":/pixmaps/volume-low.png" ) );
zorglub's avatar
zorglub committed
220
    ui.volumeSlider->setMaximum( 100 );
221
222
223
    ui.volMuteLabel->setToolTip( qtr( "Mute" ) );
    VolumeClickHandler *h = new VolumeClickHandler( p_intf, this );
    ui.volMuteLabel->installEventFilter(h);
zorglub's avatar
zorglub committed
224
225
    ui.volumeSlider->setFocusPolicy( Qt::NoFocus );

zorglub's avatar
zorglub committed
226
227
    BUTTON_SET_IMG( ui.playlistButton, "" ,volume-low.png,
                        playlistEmbeddedFlag ?  qtr( "Show playlist" ) :
zorglub's avatar
Cleanup    
zorglub committed
228
                                                qtr( "Open playlist" ) );
229
    BUTTONACT( ui.playlistButton, playlist() );
zorglub's avatar
zorglub committed
230

zorglub's avatar
zorglub committed
231
    /* Set initial size */
zorglub's avatar
zorglub committed
232
    resize ( PREF_W, PREF_H );
233

234
    addSize = QSize( ui.vboxLayout->margin() * 2, PREF_H );
235

zorglub's avatar
zorglub committed
236
237
238
239
240
241
    advControls = new ControlsWidget( p_intf );
    ui.vboxLayout->insertWidget( 0, advControls );
    advControls->updateGeometry();
    if( !advControlsEnabled ) advControls->hide();
    need_components_update = true;

242
243
244
245
246
247
248
249
250
251
252
253
254
255
    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 );
    }

256
    if( videoEmbeddedFlag )
257
    {
258
        videoWidget = new VideoWidget( p_intf );
259
        videoWidget->widgetSize = QSize( 1, 1 );
260
261
262
        videoWidget->resize( videoWidget->widgetSize );
        ui.vboxLayout->insertWidget( 0, videoWidget );

263
264
265
        p_intf->pf_request_window  = ::DoRequest;
        p_intf->pf_release_window  = ::DoRelease;
        p_intf->pf_control_window  = ::DoControl;
266
    }
zorglub's avatar
zorglub committed
267
    setMinimumSize( PREF_W, addSize.height() );
zorglub's avatar
zorglub committed
268
269
}

270
271
272
/**********************************************************************
 * Handling of the components
 **********************************************************************/
273
void MainInterface::calculateInterfaceSize()
zorglub's avatar
zorglub committed
274
{
275
    int width = 0, height = 0;
276
    if( VISIBLE( bgWidget ) )
zorglub's avatar
zorglub committed
277
    {
278
279
        width = bgWidget->widgetSize.width();
        height = bgWidget->widgetSize.height();
zorglub's avatar
zorglub committed
280
        assert( !(playlistWidget && playlistWidget->isVisible() ) );
zorglub's avatar
zorglub committed
281
    }
282
    else if( VISIBLE( playlistWidget ) )
283
    {
284
285
        width = playlistWidget->widgetSize.width();
        height = playlistWidget->widgetSize.height();
286
    }
287
288
289
290
291
    else if( videoIsActive )
    {
        width =  videoWidget->widgetSize.width() ;
        height = videoWidget->widgetSize.height();
    }
zorglub's avatar
Cleanup    
zorglub committed
292
293
294
295
296
    else
    {
        width = PREF_W - addSize.width();
        height = PREF_H - addSize.height();
    }
297
298
    if( VISIBLE( visualSelector ) )
        height += visualSelector->height();
zorglub's avatar
zorglub committed
299
300
301
302
    if( VISIBLE( advControls) )
    {
        height += advControls->sizeHint().height();
    }
303
    mainSize = QSize( width + addSize.width(), height + addSize.height() );
zorglub's avatar
zorglub committed
304
}
zorglub's avatar
zorglub committed
305

zorglub's avatar
zorglub committed
306
void MainInterface::resizeEvent( QResizeEvent *e )
307
{
308
309
    videoWidget->widgetSize.setWidth(  e->size().width() - addSize.width() );
    if( videoWidget && videoIsActive && videoWidget->widgetSize.height() > 1 )
310
    {
311
312
313
        SET_WH( videoWidget, e->size().width() - addSize.width(),
                             e->size().height()  - addSize.height() );
        videoWidget->updateGeometry();
314
    }
315
    if( VISIBLE( playlistWidget ) )
316
    {
317
318
319
        SET_WH( playlistWidget , e->size().width() - addSize.width(),
                                 e->size().height() - addSize.height() );
        playlistWidget->updateGeometry();
320
    }
321
322
}

323
324
325
326
327
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 );
328
329
330
    if( ret )
    {
        videoIsActive = true;
331
        if( VISIBLE( playlistWidget ) )
332
333
334
335
        {
            embeddedPlaylistWasActive = true;
            playlistWidget->hide();
        }
336
337
        bool bgWasVisible = false;
        if( VISIBLE( bgWidget) )
zorglub's avatar
zorglub committed
338
        {
339
            bgWasVisible = true;
zorglub's avatar
zorglub committed
340
341
            bgWidget->hide();
        }
342
343
344
345
346
347
348
349
350
351
352
        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 );
        }
353
354
355
        videoWidget->updateGeometry(); /// FIXME: Needed ?
        need_components_update = true;
    }
356
357
358
359
360
361
    return ret;
}

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

365
366
    if( embeddedPlaylistWasActive )
        playlistWidget->show();
zorglub's avatar
zorglub committed
367
368
369
    else if( bgWidget )
        bgWidget->show();

370
    videoIsActive = false;
371
    need_components_update = true;
372
373
}

374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
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;
}

zorglub's avatar
zorglub committed
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
void MainInterface::advanced()
{
    if( !VISIBLE( advControls ) )
    {
        advControls->show();
        advControlsEnabled = true;
    }
    else
    {
        advControls->hide();
        advControlsEnabled = false;
    }
    doComponentsUpdate();
}

423
424
425
426
427
428
429
430
431
void MainInterface::visual()
{
    if( !VISIBLE( visualSelector) )
    {
        visualSelector->show();
        if( !THEMIM->getIM()->hasVideo() )
        {
            /* Show the background widget */
        }
432
        visualSelectorEnabled = true;
433
434
435
436
437
    }
    else
    {
        /* Stop any currently running visualization */
        visualSelector->hide();
438
        visualSelectorEnabled = false;
439
    }
440
    doComponentsUpdate();
441
442
}

443
444
445
446
447
448
449
void MainInterface::playlist()
{
    // Toggle the playlist dialog
    if( !playlistEmbeddedFlag )
    {
        if( playlistWidget )
        {
450
            /// \todo Destroy it
451
452
453
454
455
456
457
458
459
460
461
        }
        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
462
                                               QSize( 650, 310 ) ).toSize();
463
        playlistWidget->hide();
464
465
    }
    /// Todo, reset its size ?
466
    if( VISIBLE( playlistWidget) )
467
468
469
470
    {
        playlistWidget->hide();
        if( videoIsActive )
        {
471
472
473
            videoWidget->widgetSize = savedVideoSize;
            videoWidget->resize( videoWidget->widgetSize );
            videoWidget->updateGeometry();
474
475
476
477
478
479
        }
    }
    else
    {
        playlistWidget->show();
        if( videoIsActive )
480
481
482
483
484
485
        {
            savedVideoSize = videoWidget->widgetSize;
            videoWidget->widgetSize.setHeight( 0 );
            videoWidget->resize( videoWidget->widgetSize );
            videoWidget->updateGeometry();
        }
486
        if( VISIBLE( bgWidget ) ) bgWidget->hide();
487
    }
488
    doComponentsUpdate();
489
490
}

zorglub's avatar
zorglub committed
491
492
/* Video widget cannot do this synchronously as it runs in another thread */
/* Well, could it, actually ? Probably dangerous ... */
493
494
void MainInterface::doComponentsUpdate()
{
495
496
    calculateInterfaceSize();
    resize( mainSize );
497
498
}

zorglub's avatar
zorglub committed
499
void MainInterface::undockPlaylist()
500
{
zorglub's avatar
zorglub committed
501
    if( playlistWidget )
502
    {
zorglub's avatar
zorglub committed
503
504
        playlistWidget->hide();
        playlistWidget->deleteLater();
505
506
507
        ui.vboxLayout->removeWidget( playlistWidget );
        playlistWidget = NULL;
        playlistEmbeddedFlag = false;
zorglub's avatar
zorglub committed
508

zorglub's avatar
zorglub committed
509
        menuBar()->clear();
510
511
        QVLCMenu::createMenuBar( this, p_intf, false, advControlsEnabled,
                                 visualSelectorEnabled);
zorglub's avatar
zorglub committed
512
513
514
515
516
517
518
519
520
521

        if( videoIsActive )
        {
            videoWidget->widgetSize = savedVideoSize;
            videoWidget->resize( videoWidget->widgetSize );
            videoWidget->updateGeometry();
        }

        doComponentsUpdate();
        THEDP->playlistDialog();
522
    }
zorglub's avatar
zorglub committed
523
524
525
526
527
}

void MainInterface::customEvent( QEvent *event )
{
    if( event->type() == PLDockEvent_Type )
528
529
530
    {
        PlaylistDialog::killInstance();
        playlistEmbeddedFlag = true;
zorglub's avatar
zorglub committed
531
        menuBar()->clear();
532
533
        QVLCMenu::createMenuBar(this, p_intf, true, advControlsEnabled,
                                visualSelectorEnabled);
534
535
536
537
        playlist();
    }
}

538
539
540
/************************************************************************
 * Other stuff
 ************************************************************************/
541
542
void MainInterface::keyPressEvent( QKeyEvent *e )
{
543
    int i_vlck = qtEventToVLCKey( e );
544
545
    if( i_vlck >= 0 )
    {
546
        var_SetInteger( p_intf->p_libvlc, "key-pressed", i_vlck );
547
548
549
550
551
552
        e->accept();
    }
    else
        e->ignore();
}

zorglub's avatar
zorglub committed
553
554
void MainInterface::stop()
{
555
    playlist_Stop( THEPL );
zorglub's avatar
zorglub committed
556
557
558
}
void MainInterface::play()
{
zorglub's avatar
zorglub committed
559
    if( !playlist_IsEmpty(THEPL) || !THEPL->i_enabled )
560
561
    {
        /* The playlist is empty, open a file requester */
zorglub's avatar
zorglub committed
562
        THEDP->simpleOpenDialog();
563
564
565
566
        setStatus( 0 );
        return;
    }
    THEMIM->togglePlayPause();
zorglub's avatar
zorglub committed
567
568
569
}
void MainInterface::prev()
{
570
    playlist_Prev( THEPL );
zorglub's avatar
zorglub committed
571
572
573
}
void MainInterface::next()
{
574
    playlist_Next( THEPL );
zorglub's avatar
zorglub committed
575
576
577
578
579
580
581
582
583
}

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 );
584
    timeLabel->setText( " "+title+" " );
zorglub's avatar
zorglub committed
585
586
587
588
}

void MainInterface::setName( QString name )
{
589
    nameLabel->setText( " " + name+" " );
zorglub's avatar
zorglub committed
590
591
}

592
593
void MainInterface::setStatus( int status )
{
zorglub's avatar
zorglub committed
594
    if( status == 1 ) // Playing
595
596
597
598
599
        ui.playButton->setIcon( QIcon( ":/pixmaps/pause.png" ) );
    else
        ui.playButton->setIcon( QIcon( ":/pixmaps/play.png" ) );
}

zorglub's avatar
zorglub committed
600
601
static bool b_my_volume;

zorglub's avatar
zorglub committed
602
603
void MainInterface::updateOnTimer()
{
604
    /* \todo Make this event-driven */
zorglub's avatar
zorglub committed
605
606
607
    advControls->enableInput( THEMIM->getIM()->hasInput() );
    advControls->enableVideo( THEMIM->getIM()->hasVideo() );

608
    if( intf_ShouldDie( p_intf ) )
zorglub's avatar
zorglub committed
609
    {
zorglub's avatar
zorglub committed
610
        QApplication::closeAllWindows();
zorglub's avatar
zorglub committed
611
612
        QApplication::quit();
    }
613
614
615
616
617
618
    if( need_components_update )
    {
        doComponentsUpdate();
        need_components_update = false;
    }

zorglub's avatar
zorglub committed
619
620
621
622
623
624
625
626
627
628
629
    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
630
631
632
633
634
635
}

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

zorglub's avatar
zorglub committed
638
639
640
641
642
643
644
645
646
647
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
648
649
650
651
652
653
654
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);
    DialogEvent *event = new DialogEvent( INTF_DIALOG_INTERACTION, 0, p_arg );
655
    QApplication::postEvent( THEDP, static_cast<QEvent*>(event) );
zorglub's avatar
zorglub committed
656
657
    return VLC_SUCCESS;
}