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

midi

开发平台:

Unix_Linux

  1. /*****************************************************************************
  2.  * ctrl_tree.hpp
  3.  *****************************************************************************
  4.  * Copyright (C) 2003 the VideoLAN team
  5.  * $Id: 59d7d3e07aaf0c652dcf4d0b76240dcc4795edaa $
  6.  *
  7.  * Authors: Antoine Cellerier <dionoea@videolan.org>
  8.  *          Clément Stenac <zorglub@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 CTRL_TREE_HPP
  25. #define CTRL_TREE_HPP
  26. #include "ctrl_generic.hpp"
  27. #include "../utils/observer.hpp"
  28. #include "../utils/var_tree.hpp"
  29. class OSGraphics;
  30. class GenericFont;
  31. class GenericBitmap;
  32. /// Class for control tree
  33. class CtrlTree: public CtrlGeneric, public Observer<VarTree, tree_update>,
  34.     public Observer<VarPercent>
  35. {
  36.     public:
  37.         CtrlTree( intf_thread_t *pIntf,
  38.                   VarTree &rTree,
  39.                   const GenericFont &rFont,
  40.                   const GenericBitmap *pBgBitmap,
  41.                   const GenericBitmap *pItemBitmap,
  42.                   const GenericBitmap *pOpenBitmap,
  43.                   const GenericBitmap *pClosedBitmap,
  44.                   uint32_t fgColor,
  45.                   uint32_t playColor,
  46.                   uint32_t bgColor1,
  47.                   uint32_t bgColor2,
  48.                   uint32_t selColor,
  49.                   const UString &rHelp,
  50.                   VarBool *pVisible,
  51.                   VarBool *pFlat );
  52.         virtual ~CtrlTree();
  53.         /// Handle an event on the control
  54.         virtual void handleEvent( EvtGeneric &rEvent );
  55.         /// Check whether coordinates are inside the control
  56.         virtual bool mouseOver( int x, int y ) const;
  57.         /// Draw the control on the given graphics
  58.         virtual void draw( OSGraphics &rImage, int xDest, int yDest );
  59.         /// Called when the layout is resized
  60.         virtual void onResize();
  61.         /// Return true if the control can gain the focus
  62.         virtual bool isFocusable() const { return true; }
  63.         /// Get the type of control (custom RTTI)
  64.         virtual string getType() const { return "tree"; }
  65.         /// Make sure an item is visible
  66.         /// param item an iterator to a tree item
  67.         /// return true if it changed the position
  68.         bool ensureVisible( VarTree::Iterator item );
  69.         /// Make sure an item is visible
  70.         /// param itemIndex the absolute index in the tree
  71.         /// return true if it changed the position
  72.         bool ensureVisible( int itemIndex );
  73.     private:
  74.         /// Tree associated to the control
  75.         VarTree &m_rTree;
  76.         /// Font
  77.         const GenericFont &m_rFont;
  78.         /// Background bitmap
  79.         const GenericBitmap *m_pBgBitmap;
  80.         /// Item (leaf) bitmap
  81.         // (TODO : add different bitmaps for different item types
  82.         //         like in the wx playlist)
  83.         const GenericBitmap *m_pItemBitmap;
  84.         /// Open (expanded) node bitmap
  85.         const GenericBitmap *m_pOpenBitmap;
  86.         /// Closed node bitmap
  87.         const GenericBitmap *m_pClosedBitmap;
  88.         /// Color of normal test
  89.         uint32_t m_fgColor;
  90.         /// Color of the playing item
  91.         uint32_t m_playColor;
  92.         /// Background colors, used when no background bitmap is given
  93.         uint32_t m_bgColor1, m_bgColor2;
  94.         /// Background of selected items
  95.         uint32_t m_selColor;
  96.         /// Pointer on the last selected item in the tree
  97.         VarTree *m_pLastSelected;
  98.         /// Image of the control
  99.         OSGraphics *m_pImage;
  100.         /// First item in the visible area
  101.         VarTree::Iterator m_firstPos;
  102.         /// Don't move if the position variable is updated
  103.         bool m_dontMove;
  104.         /// Do we want to "flaten" the tree ?
  105.         bool m_flat;
  106.         /// Method called when the tree variable is modified
  107.         virtual void onUpdate( Subject<VarTree, tree_update> &rTree ,
  108.                                tree_update *);
  109.         // Method called when the position variable of the tree is modified
  110.         virtual void onUpdate( Subject<VarPercent> &rPercent , void *);
  111.         /// Called when the position is set
  112.         virtual void onPositionChange();
  113.         /// Compute the number of lines that can be displayed
  114.         int maxItems();
  115.         /// Compute the item's height (depends on fonts and images used)
  116.         int itemHeight();
  117.         /// Compute the width of an item's bitmap
  118.         int itemImageWidth();
  119.         /// Check if the tree must be scrolled
  120.         void autoScroll();
  121.         /// Draw the image of the control
  122.         void makeImage();
  123.         /// Return the n'th displayed item (starting at position 0)
  124.         /**
  125.          *  Return m_rTree.end() if such an item cannot be found (n < 0, or
  126.          *  n too big)
  127.          */
  128.         VarTree::Iterator findItemAtPos( int n );
  129. };
  130. #endif