00001 /***************************************************************************** 00002 * ctrl_list.hpp 00003 ***************************************************************************** 00004 * Copyright (C) 2003 the VideoLAN team 00005 * $Id: 5fd6f7a8db845588573488970e9b8d4b29479191 $ 00006 * 00007 * Authors: Cyril Deguet <asmax@via.ecp.fr> 00008 * Olivier Teulière <ipkiss@via.ecp.fr> 00009 * 00010 * This program is free software; you can redistribute it and/or modify 00011 * it under the terms of the GNU General Public License as published by 00012 * the Free Software Foundation; either version 2 of the License, or 00013 * (at your option) any later version. 00014 * 00015 * This program is distributed in the hope that it will be useful, 00016 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00017 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00018 * GNU General Public License for more details. 00019 * 00020 * You should have received a copy of the GNU General Public License along 00021 * with this program; if not, write to the Free Software Foundation, Inc., 00022 * 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. 00023 *****************************************************************************/ 00024 00025 #ifndef CTRL_LIST_HPP 00026 #define CTRL_LIST_HPP 00027 00028 #include "ctrl_generic.hpp" 00029 #include "../utils/observer.hpp" 00030 #include "../utils/var_list.hpp" 00031 00032 class OSGraphics; 00033 class GenericFont; 00034 class GenericBitmap; 00035 00036 00037 /// Class for control list 00038 class CtrlList: public CtrlGeneric, public Observer<VarList>, 00039 public Observer<VarPercent> 00040 { 00041 public: 00042 CtrlList( intf_thread_t *pIntf, VarList &rList, 00043 const GenericFont &rFont, const GenericBitmap *pBitmap, 00044 uint32_t fgcolor, uint32_t playcolor, uint32_t bgcolor1, 00045 uint32_t bgcolor2, uint32_t selColor, 00046 const UString &rHelp, VarBool *pVisible ); 00047 virtual ~CtrlList(); 00048 00049 /// Handle an event on the control. 00050 virtual void handleEvent( EvtGeneric &rEvent ); 00051 00052 /// Check whether coordinates are inside the control. 00053 virtual bool mouseOver( int x, int y ) const; 00054 00055 /// Draw the control on the given graphics 00056 virtual void draw( OSGraphics &rImage, int xDest, int yDest ); 00057 00058 /// Called when the layout is resized 00059 virtual void onResize(); 00060 00061 /// Return true if the control can gain the focus 00062 virtual bool isFocusable() const { return true; } 00063 00064 /// Get the type of control (custom RTTI) 00065 virtual string getType() const { return "list"; } 00066 00067 private: 00068 /// List associated to the control 00069 VarList &m_rList; 00070 /// Font 00071 const GenericFont &m_rFont; 00072 /// Background bitmap 00073 /** If NULL, the 2 background colors defined below will be used */ 00074 const GenericBitmap *m_pBitmap; 00075 /// Color of normal text 00076 uint32_t m_fgColor; 00077 /// Color of the playing item 00078 uint32_t m_playColor; 00079 /// Background colors, used when no background bitmap is given 00080 uint32_t m_bgColor1, m_bgColor2; 00081 /// Background of selected items 00082 uint32_t m_selColor; 00083 /// Pointer on the last selected item in the list 00084 VarList::Elem_t *m_pLastSelected; 00085 /// Image of the control 00086 OSGraphics *m_pImage; 00087 /// Last position 00088 int m_lastPos; 00089 00090 /// Method called when the list variable is modified 00091 virtual void onUpdate( Subject<VarList> &rList, void* ); 00092 00093 /// Method called when the position variable of the list is modified 00094 virtual void onUpdate( Subject<VarPercent> &rPercent, void* ); 00095 00096 /// Called when the position is set 00097 virtual void onPositionChange(); 00098 00099 /// Check if the list must be scrolled 00100 void autoScroll(); 00101 00102 /// Draw the image of the control 00103 void makeImage(); 00104 }; 00105 00106 #endif
1.5.6