aboutsummaryrefslogblamecommitdiff
path: root/src/plugins/Ui/skinned/playlist.h
blob: 31b0aa8af2eb14f3cdb218f883ba07cda2df8d66 (plain) (tree)
1
2
3
                                                                            
                                                                            
                                                                            













                                                                            
                                                                            




                                                                             
                   
 
            

                 
                   








                       
                      
                      
                      
                       
                     
 
   
                                        
  



                               
                                                                               
                            
 
                            
                                           

                             
                  


                               








                            
                      
 


                                  





                                
                          
                              
                              
                             
                                        
                                                              

                                                                                       

            
                               
                                     
                                                                              

                             
                







                                                        
                  
                                            
      




                              
                                  
                                




                                 


                                            

                                 

                                     

                              
                    
                     
                              
                                      
                                      
                                           
                                                
                                                  
                  

                      


      
/***************************************************************************
 *   Copyright (C) 2006-2020 by Ilya Kotov                                 *
 *   forkotov02@ya.ru                                                      *
 *                                                                         *
 *   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 PLAYLIST_H
#define PLAYLIST_H

#include <QWidget>
#include <QPointer>

class QMenu;
class Skin;
class ListWidget;
class PlayListItem;
class Button;
class PlayListModel;
class PlayListTitleBar;
class PlayListSlider;
class MainWindow;
class SymbolDisplay;
class OutputState;
class PixmapWidget;
class PlaylistControl;
class KeyboardManager;
class PlayListManager;
class PlayListBrowser;
class PlayListSelector;
class QmmpUiSettings;

/**
   @author Ilya Kotov <forkotov02@ya.ru>
*/
class PlayList : public QWidget
{
        Q_OBJECT
    public:
        explicit PlayList(PlayListManager *manager, QWidget *parent = nullptr);
        virtual ~PlayList();

        void readSettings();
        void setMinimalMode(bool b = true);
        void writeSettings();

#ifdef QMMP_WS_X11
        bool useCompiz() const;
#endif

    signals:
        void play();
        void next();
        void prev();
        void pause();
        void stop();
        void eject();
        void loadPlaylist();
        void savePlaylist();
        void closed();

    public slots:
        void setTime(qint64 time);

    private slots:
        void showAddMenu();
        void showSubMenu();
        void showSelectMenu();
        void showSortMenu();
        void showPlaylistMenu();
        void updateSkin();
        void deletePlaylist();
        void renamePlaylist();
        void showPlayLists();
        void generateCopySelectedMenu();
        void copySelectedMenuActionTriggered(QAction *action);
        void onCurrentPlayListChanged(PlayListModel *current, PlayListModel *previous);
        void onListChanged(int flags);

    private:
        void updatePositions();
        QString formatTime (int sec);
        void drawPixmap (QPainter *painter, int x, int y, const QPixmap &pix);
        void createMenus();
        void createActions();
        //events
        void paintEvent (QPaintEvent *) override;
        void resizeEvent (QResizeEvent *) override;
        void mouseMoveEvent (QMouseEvent *) override;
        void mousePressEvent (QMouseEvent *) override;
        void mouseReleaseEvent (QMouseEvent *) override;
        void changeEvent (QEvent*) override;
        void closeEvent (QCloseEvent*) override;
        void keyPressEvent (QKeyEvent*) override;
#ifdef QMMP_WS_X11
        bool event (QEvent *event) override;
#endif
        QMenu *m_addMenu;
        QMenu *m_subMenu;
        QMenu *m_selectMenu;
        QMenu *m_sortMenu;
        QMenu *m_playlistMenu;
        QMenu *m_copySelectedMenu;
        QWidget *m_resizeWidget;
        Button *m_buttonAdd;
        Button *m_buttonSub;
        Button *m_selectButton;
        Button *m_sortButton;
        Button* m_playlistButton;
        PlaylistControl* m_pl_control;
        SymbolDisplay* m_length_totalLength;
        SymbolDisplay* m_current_time;
        Skin *m_skin;
        ListWidget *m_listWidget;
        PlayListTitleBar *m_titleBar;
        PlayListSlider *m_plslider;
        bool m_resize = false;
        bool m_update = false;
        int m_ratio;
        int m_height;
        bool m_shaded = false;
        PlayListManager *m_pl_manager;
        QmmpUiSettings *m_ui_settings;
        KeyboardManager* m_keyboardManager;
        QPointer <PlayListBrowser> m_pl_browser;
        PlayListSelector *m_pl_selector = nullptr;
#ifdef QMMP_WS_X11
        bool m_compiz;
#endif
};

#endif