1 /***************************************************************************** 2 * popup.hpp 3 ***************************************************************************** 4 * Copyright (C) 2003 the VideoLAN team 5 * $Id: 17984cbe697756198e621e58f8a3083e46507b32 $ 6 * 7 * Authors: Olivier Teulière <ipkiss@via.ecp.fr> 8 * 9 * This program is free software; you can redistribute it and/or modify 10 * it under the terms of the GNU General Public License as published by 11 * the Free Software Foundation; either version 2 of the License, or 12 * (at your option) any later version. 13 * 14 * This program is distributed in the hope that it will be useful, 15 * but WITHOUT ANY WARRANTY; without even the implied warranty of 16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 * GNU General Public License for more details. 18 * 19 * You should have received a copy of the GNU General Public License along 20 * with this program; if not, write to the Free Software Foundation, Inc., 21 * 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. 22 *****************************************************************************/ 23 24 #ifndef POPUP_HPP 25 #define POPUP_HPP 26 27 #include "skin_common.hpp" 28 #include "../utils/pointer.hpp" 29 #include <string> 30 #include <map> 31 32 class OSPopup; 33 class TopWindow; 34 class CmdGeneric; 35 class WindowManager; 36 class EvtMenu; 37 38 39 /// Class handling a popup menu 40 class Popup: public SkinObject 41 { 42 public: 43 Popup( intf_thread_t *pIntf, WindowManager &rWindowManager ); ~Popup()44 virtual ~Popup() { } 45 46 void show( int xPos, int yPos ); 47 void hide(); 48 49 // XXX: it would be nice to use a UString here, if X11 supports it for 50 // its menu items (Windows doesn't, unfortunately) 51 /// Insert a new menu item to the popup menu, at the position pos 52 void addItem( const std::string &rLabel, CmdGeneric &rCmd, int pos ); 53 54 /// Create a dummy menu item to separate sections 55 void addSeparator( int pos ); 56 57 /// Execute the action corresponding to the chosen menu item 58 void handleEvent( const EvtMenu &rEvent ); 59 60 private: 61 /// OS specific implementation 62 OSPopup *m_pOsPopup; 63 64 /// Window manager 65 WindowManager &m_rWindowManager; 66 67 /// Actions for the menu items, indexed by the position in the menu 68 std::map<int, CmdGeneric *> m_actions; 69 }; 70 71 typedef CountedPtr<Popup> PopupPtr; 72 73 74 #endif 75