123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299 |
- /*****************************************************************************
- * interface_widgets.hpp : Custom widgets for the main interface
- ****************************************************************************
- * Copyright (C) 2006-2008 the VideoLAN team
- * $Id$
- *
- * Authors: Clément Stenac <zorglub@videolan.org>
- * Jean-Baptiste Kempf <jb@videolan.org>
- * Rafaël Carré <funman@videolanorg>
- *
- * 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.
- *****************************************************************************/
- #ifndef VLC_QT_INTERFACE_WIDGETS_HPP_
- #define VLC_QT_INTERFACE_WIDGETS_HPP_
- #ifdef HAVE_CONFIG_H
- # include "config.h"
- #endif
- #include "main_interface.hpp" /* Interface integration */
- #include "input_manager.hpp" /* Speed control */
- #include "components/controller.hpp"
- #include "components/controller_widget.hpp"
- #include "dialogs_provider.hpp"
- #include "components/info_panels.hpp"
- #include <QWidget>
- #include <QFrame>
- #include <QLabel>
- #include <QMouseEvent>
- #include <QPropertyAnimation>
- #include <QLinkedList>
- class QMenu;
- class QSlider;
- class QWidgetAction;
- class SpeedControlWidget;
- struct vout_window_t;
- /******************** Video Widget ****************/
- class VideoWidget : public QFrame
- {
- Q_OBJECT
- public:
- VideoWidget( intf_thread_t * );
- virtual ~VideoWidget();
- WId request( struct vout_window_t *, unsigned int *, unsigned int *, bool );
- void release( void );
- void sync( void );
- protected:
- QPaintEngine *paintEngine() const Q_DECL_OVERRIDE
- {
- return NULL;
- }
- virtual void resizeEvent(QResizeEvent *) Q_DECL_OVERRIDE;
- void mousePressEvent(QMouseEvent *) Q_DECL_OVERRIDE;
- void mouseMoveEvent(QMouseEvent *) Q_DECL_OVERRIDE;
- void mouseReleaseEvent(QMouseEvent *) Q_DECL_OVERRIDE;
- void mouseDoubleClickEvent(QMouseEvent *) Q_DECL_OVERRIDE;
- private:
- int qtMouseButton2VLC( Qt::MouseButton );
- intf_thread_t *p_intf;
- vout_window_t *p_window;
- QWidget *stable;
- QLayout *layout;
- signals:
- void sizeChanged( int, int );
- public slots:
- void setSize( unsigned int, unsigned int );
- };
- /******************** Background Widget ****************/
- class BackgroundWidget : public QWidget
- {
- Q_OBJECT
- public:
- BackgroundWidget( intf_thread_t * );
- void setExpandstoHeight( bool b_expand ) { b_expandPixmap = b_expand; }
- void setWithArt( bool b_withart_ ) { b_withart = b_withart_; };
- private:
- intf_thread_t *p_intf;
- QString pixmapUrl;
- bool b_expandPixmap;
- bool b_withart;
- QPropertyAnimation *fadeAnimation;
- void contextMenuEvent( QContextMenuEvent *event ) Q_DECL_OVERRIDE;
- protected:
- void paintEvent( QPaintEvent *e ) Q_DECL_OVERRIDE;
- void showEvent( QShowEvent * e ) Q_DECL_OVERRIDE;
- static const int MARGIN = 5;
- QString defaultArt;
- public slots:
- void toggle(){ TOGGLEV( this ); }
- void updateArt( const QString& );
- };
- class EasterEggBackgroundWidget : public BackgroundWidget
- {
- Q_OBJECT
- public:
- EasterEggBackgroundWidget( intf_thread_t * );
- virtual ~EasterEggBackgroundWidget();
- public slots:
- void animate();
- protected:
- void paintEvent( QPaintEvent *e ) Q_DECL_OVERRIDE;
- void showEvent( QShowEvent *e ) Q_DECL_OVERRIDE;
- void hideEvent( QHideEvent * ) Q_DECL_OVERRIDE;
- void resizeEvent( QResizeEvent * ) Q_DECL_OVERRIDE;
- private slots:
- void spawnFlakes();
- void reset();
- private:
- struct flake
- {
- QPoint point;
- bool b_fat;
- };
- QTimer *timer;
- QLinkedList<flake *> *flakes;
- int i_rate;
- int i_speed;
- bool b_enabled;
- static const int MAX_FLAKES = 1000;
- };
- #if 0
- class VisualSelector : public QFrame
- {
- Q_OBJECT
- public:
- VisualSelector( intf_thread_t *);
- virtual ~VisualSelector();
- private:
- intf_thread_t *p_intf;
- QLabel *current;
- private slots:
- void prev();
- void next();
- };
- #endif
- class ClickableQLabel : public QLabel
- {
- Q_OBJECT
- public:
- void mouseDoubleClickEvent( QMouseEvent *event ) Q_DECL_OVERRIDE
- {
- Q_UNUSED( event );
- emit doubleClicked();
- }
- signals:
- void doubleClicked();
- };
- class TimeLabel : public ClickableQLabel
- {
- Q_OBJECT
- public:
- enum Display
- {
- Elapsed,
- Remaining,
- Both
- };
- TimeLabel( intf_thread_t *_p_intf, TimeLabel::Display _displayType = TimeLabel::Both );
- protected:
- void mousePressEvent( QMouseEvent *event ) Q_DECL_OVERRIDE
- {
- if( displayType == TimeLabel::Elapsed ) return;
- toggleTimeDisplay();
- event->accept();
- }
- void mouseDoubleClickEvent( QMouseEvent *event ) Q_DECL_OVERRIDE
- {
- if( displayType != TimeLabel::Both ) return;
- event->accept();
- toggleTimeDisplay();
- ClickableQLabel::mouseDoubleClickEvent( event );
- }
- private:
- intf_thread_t *p_intf;
- bool b_remainingTime;
- int cachedLength;
- TimeLabel::Display displayType;
- char psz_length[MSTRTIME_MAX_SIZE];
- char psz_time[MSTRTIME_MAX_SIZE];
- void toggleTimeDisplay();
- private slots:
- void setRemainingTime( bool );
- void setDisplayPosition( float pos, int64_t time, int length );
- void setDisplayPosition( float pos );
- signals:
- void broadcastRemainingTime( bool );
- };
- class SpeedLabel : public QLabel
- {
- Q_OBJECT
- public:
- SpeedLabel( intf_thread_t *, QWidget * );
- virtual ~SpeedLabel();
- protected:
- void mousePressEvent ( QMouseEvent * event ) Q_DECL_OVERRIDE
- {
- showSpeedMenu( event->pos() );
- }
- private slots:
- void showSpeedMenu( QPoint );
- void setRate( float );
- private:
- intf_thread_t *p_intf;
- QMenu *speedControlMenu;
- QString tooltipStringPattern;
- SpeedControlWidget *speedControl;
- QWidgetAction *widgetAction;
- };
- /******************** Speed Control Widgets ****************/
- class SpeedControlWidget : public QFrame
- {
- Q_OBJECT
- public:
- SpeedControlWidget( intf_thread_t *, QWidget * );
- void updateControls( float );
- private:
- intf_thread_t* p_intf;
- QSlider* speedSlider;
- QDoubleSpinBox* spinBox;
- int lastValue;
- public slots:
- void activateOnState();
- private slots:
- void updateRate( int );
- void updateSpinBoxRate( double );
- void resetRate();
- };
- class CoverArtLabel : public QLabel
- {
- Q_OBJECT
- public:
- CoverArtLabel( QWidget *parent, intf_thread_t * );
- void setItem( input_item_t * );
- virtual ~CoverArtLabel();
- protected:
- void mouseDoubleClickEvent( QMouseEvent *event ) Q_DECL_OVERRIDE
- {
- if( ! p_item && qobject_cast<MetaPanel *>(this->window()) == NULL )
- {
- THEDP->mediaInfoDialog();
- }
- event->accept();
- }
- private:
- intf_thread_t *p_intf;
- input_item_t *p_item;
- public slots:
- void showArtUpdate( const QString& );
- void showArtUpdate( input_item_t * );
- void askForUpdate();
- void setArtFromFile();
- void clear();
- };
- #endif
|