menus.hpp
上传用户:kjfoods
上传日期:2020-07-06
资源大小:29949k
文件大小:5k
源码类别:

midi

开发平台:

Unix_Linux

  1. /*****************************************************************************
  2.  * menus.hpp : Menus handling
  3.  ****************************************************************************
  4.  * Copyright (C) 2006 the VideoLAN team
  5.  * $Id: 19c9c46e536ceb375650076c96de40ac8c412ff9 $
  6.  *
  7.  * Authors: Clément Stenac <zorglub@videolan.org>
  8.  *          Jean-Baptiste Kempf <jb@videolan.org>
  9.  *
  10.  * This program is free software; you can redistribute it and/or modify
  11.  * it under the terms of the GNU General Public License as published by
  12.  * the Free Software Foundation; either version 2 of the License, or
  13.  * (at your option) any later version.
  14.  *
  15.  * This program is distributed in the hope that it will be useful,
  16.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  17.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  18.  * GNU General Public License for more details.
  19.  *
  20.  * You should have received a copy of the GNU General Public License
  21.  * along with this program; if not, write to the Free Software
  22.  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
  23.  *****************************************************************************/
  24. #ifndef QVLC_MENUS_H_
  25. #define QVLC_MENUS_H_
  26. #include "qt4.hpp"
  27. #include <QObject>
  28. #include <QAction>
  29. #include <vector>
  30. /* Folder vs. Directory */
  31. #if defined( WIN32 ) || defined(__APPLE__)
  32. #define I_OPEN_FOLDER N_("Open &Folder...")
  33. #else
  34. #define I_OPEN_FOLDER N_("Open D&irectory...")
  35. #endif //WIN32
  36. using namespace std;
  37. class QMenu;
  38. class QMenuBar;
  39. class QSystemTrayIcon;
  40. class MenuItemData : public QObject
  41. {
  42.     Q_OBJECT
  43. public:
  44.     MenuItemData( QObject* parent, vlc_object_t *_p_obj, int _i_type,
  45.                   vlc_value_t _val, const char *_var ) : QObject( parent )
  46.     {
  47.         p_obj = _p_obj;
  48.         if( p_obj )
  49.             vlc_object_hold( p_obj );
  50.         i_val_type = _i_type;
  51.         val = _val;
  52.         psz_var = strdup( _var );
  53.     }
  54.     virtual ~MenuItemData()
  55.     {
  56.         free( psz_var );
  57.         if( ( i_val_type & VLC_VAR_TYPE) == VLC_VAR_STRING )
  58.             free( val.psz_string );
  59.         if( p_obj )
  60.             vlc_object_release( p_obj );
  61.     }
  62.     vlc_object_t *p_obj;
  63.     vlc_value_t val;
  64.     char *psz_var;
  65. private:
  66.     int i_val_type;
  67. };
  68. class QVLCMenu : public QObject
  69. {
  70.     Q_OBJECT;
  71.     friend class MenuFunc;
  72. public:
  73.     /* Main bar creation */
  74.     static void createMenuBar( MainInterface *mi, intf_thread_t * );
  75.     /* Popups Menus */
  76.     static void PopupMenu( intf_thread_t *, bool );
  77.     static void AudioPopupMenu( intf_thread_t * );
  78.     static void VideoPopupMenu( intf_thread_t * );
  79.     static void MiscPopupMenu( intf_thread_t * );
  80.     /* Systray */
  81.     static void updateSystrayMenu( MainInterface *,intf_thread_t  *,
  82.                                    bool b_force_visible = false);
  83.     /* Actions */
  84.     static void DoAction( QObject * );
  85. private:
  86.     /* All main Menus */
  87.     static QMenu *FileMenu( intf_thread_t *, QWidget * );
  88.     static QMenu *SDMenu( intf_thread_t *, QWidget * );
  89.     static QMenu *ToolsMenu( QMenu * );
  90.     static QMenu *ToolsMenu( QWidget * );
  91.     static QMenu *ViewMenu( intf_thread_t *, MainInterface *,
  92.                             bool with = true );
  93.     static QMenu *InterfacesMenu( intf_thread_t *p_intf, QMenu * );
  94.     static QMenu *NavigMenu( intf_thread_t *, QMenu * );
  95.     static QMenu *NavigMenu( intf_thread_t *, QWidget * );
  96.     static QMenu *RebuildNavigMenu( intf_thread_t *, QMenu *);
  97.     static QMenu *VideoMenu( intf_thread_t *, QMenu * );
  98.     static QMenu *VideoMenu( intf_thread_t *, QWidget * );
  99.     static QMenu *AudioMenu( intf_thread_t *, QMenu * );
  100.     static QMenu *AudioMenu( intf_thread_t *, QWidget * );
  101.     static QMenu *HelpMenu( QWidget * );
  102.     /* Popups Menus */
  103.     static void PopupMenuStaticEntries( QMenu *menu );
  104.     static void PopupPlayEntries( QMenu *menu, intf_thread_t *p_intf,
  105.                                          input_thread_t *p_input );
  106.     static void PopupMenuControlEntries( QMenu *menu, intf_thread_t *p_intf );
  107.     static void PopupMenuPlaylistControlEntries( QMenu *menu, intf_thread_t *p_intf );
  108.     /* Generic automenu methods */
  109.     static QMenu * Populate( intf_thread_t *, QMenu *current,
  110.                              vector<const char*>&, vector<vlc_object_t *>& );
  111.     static void CreateAndConnect( QMenu *, const char *, QString, QString,
  112.                                   int, vlc_object_t *, vlc_value_t, int,
  113.                                   bool c = false );
  114.     static void UpdateItem( intf_thread_t *, QMenu *, const char *,
  115.                             vlc_object_t *, bool );
  116.     static int CreateChoicesMenu( QMenu *,const char *, vlc_object_t *, bool );
  117.     /* recentMRL menu */
  118.     static QMenu *recentsMenu;
  119. public slots:
  120.     static void updateRecents( intf_thread_t * );
  121. };
  122. class MenuFunc : public QObject
  123. {
  124.     Q_OBJECT
  125. public:
  126.     MenuFunc( QMenu *_menu, int _id ) : QObject( (QObject *)_menu ),
  127.                                         menu( _menu ), id( _id ){}
  128.     void doFunc( intf_thread_t *p_intf)
  129.     {
  130.         switch( id )
  131.         {
  132.             case 1: QVLCMenu::AudioMenu( p_intf, menu ); break;
  133.             case 2: QVLCMenu::VideoMenu( p_intf, menu ); break;
  134.             case 3: QVLCMenu::RebuildNavigMenu( p_intf, menu ); break;
  135.             case 4: QVLCMenu::InterfacesMenu( p_intf, menu ); break;
  136.         }
  137.     }
  138. private:
  139.     QMenu *menu;
  140.     int id;
  141. };
  142. #endif