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

midi

开发平台:

Unix_Linux

  1. /*****************************************************************************
  2.  * fileinfo.cpp : WinCE gui plugin for vlc
  3.  *****************************************************************************
  4.  * Copyright (C) 2000-2004 the VideoLAN team
  5.  * $Id: e75cc5a50ed635ff31417a75b1c054a2e5a37e9a $
  6.  *
  7.  * Authors: Marodon Cedric <cedric_marodon@yahoo.fr>
  8.  *          Gildas Bazin <gbazin@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. /*****************************************************************************
  25.  * Preamble
  26.  *****************************************************************************/
  27. #ifdef HAVE_CONFIG_H
  28. # include "config.h"
  29. #endif
  30. #include <vlc_common.h>
  31. #include <vlc_interface.h>
  32. #include <vlc_input.h>
  33. #include "wince.h"
  34. #include <winuser.h>
  35. #include <windows.h>
  36. #include <windowsx.h>
  37. #include <commctrl.h>
  38. #include <commdlg.h>
  39. /*****************************************************************************
  40.  * Constructor.
  41.  *****************************************************************************/
  42. FileInfo::FileInfo( intf_thread_t *p_intf, CBaseWindow *p_parent,
  43.                     HINSTANCE h_inst )
  44.   :  CBaseWindow( p_intf, p_parent, h_inst )
  45. {
  46.     /* Initializations */
  47.     hwnd_fileinfo = hwndTV = NULL;
  48. }
  49. /***********************************************************************
  50. FUNCTION:
  51.   CreateTreeView
  52. PURPOSE:
  53.   Registers the TreeView control class and creates a TreeView.
  54. ***********************************************************************/
  55. BOOL FileInfo::CreateTreeView(HWND hwnd)
  56. {
  57.     DWORD dwStyle;
  58.     RECT rect;
  59.     INITCOMMONCONTROLSEX iccex;
  60.     iccex.dwSize = sizeof( INITCOMMONCONTROLSEX );
  61.     iccex.dwICC = ICC_TREEVIEW_CLASSES;
  62.     // Registers Statusbar control classes from the common control dll
  63.     InitCommonControlsEx( &iccex );
  64.     // Get the coordinates of the parent window's client area
  65.     GetClientRect( hwnd, &rect );
  66.     // Assign the window styles for the tree view.
  67.     dwStyle = WS_VISIBLE | WS_CHILD | TVS_HASLINES | TVS_LINESATROOT |
  68.                           TVS_HASBUTTONS;
  69.     // Create the tree-view control.
  70.     hwndTV = CreateWindowEx( 0, WC_TREEVIEW, NULL, dwStyle, 0, MENU_HEIGHT,
  71.                              rect.right-rect.left,
  72.                              rect.bottom-rect.top-MENU_HEIGHT,
  73.                              hwnd, NULL, hInst, NULL );
  74.     // Be sure that the tree view actually was created.
  75.     if( !hwndTV ) return FALSE;
  76.     UpdateFileInfo();
  77.     return TRUE;
  78. }
  79. /***********************************************************************
  80. FUNCTION:
  81.   UpdateFileInfo
  82. PURPOSE:
  83.   Update the TreeView with file information.
  84. ***********************************************************************/
  85. void FileInfo::UpdateFileInfo()
  86. {
  87.     TVITEM tvi = {0};
  88.     TVINSERTSTRUCT tvins = {0};
  89.     HTREEITEM hPrev = (HTREEITEM)TVI_FIRST;
  90.     HTREEITEM hPrevRootItem = NULL;
  91.     HTREEITEM hPrevLev2Item = NULL;
  92.     p_intf->p_sys->p_input = (input_thread_t *)
  93.         vlc_object_find( p_intf, VLC_OBJECT_INPUT, FIND_ANYWHERE );
  94.     input_thread_t *p_input = p_intf->p_sys->p_input;
  95.     if( !p_input ) return;
  96.     tvi.mask = TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE | TVIF_PARAM;
  97.     input_item_t * inp_item = input_GetItem(p_input);
  98.     tvi.pszText = _FROMMB( input_item_GetName( inp_item ) );
  99.     tvi.cchTextMax = _tcslen( tvi.pszText );
  100.     // Save the heading level in the item's application-defined data area
  101.     tvi.lParam = (LPARAM)1;
  102.     tvins.item = tvi;
  103.     //tvins.hInsertAfter = TVI_LAST;
  104.     tvins.hInsertAfter = hPrev;
  105.     tvins.hParent = TVI_ROOT;
  106.     // Add the item to the tree-view control.
  107.     hPrev = (HTREEITEM)TreeView_InsertItem( hwndTV, &tvins );
  108.     hPrevRootItem = hPrev;
  109.     vlc_mutex_lock( &inp_item->lock );
  110.     for( int i = 0; i < inp_item->i_categories; i++ )
  111.     {
  112.         info_category_t *p_cat = inp_item->pp_categories[i];
  113.         // Set the text of the item.
  114.         tvi.pszText = _FROMMB( inp_item->psz_name );
  115.         tvi.cchTextMax = _tcslen( tvi.pszText );
  116.  
  117.         // Save the heading level in the item's application-defined data area
  118.         tvi.lParam = (LPARAM)2; // level 2
  119.         tvins.item = tvi;
  120.         tvins.hInsertAfter = hPrev;
  121.         tvins.hParent = hPrevRootItem;
  122.         // Add the item to the tree-view control.
  123.         hPrev = (HTREEITEM)TreeView_InsertItem( hwndTV, &tvins );
  124.         hPrevLev2Item = hPrev;
  125.         for( int j = 0; j < p_cat->i_infos; j++ )
  126.         {
  127.             info_t *p_info = p_cat->pp_infos[j];
  128.             // Set the text of the item.
  129.             string szAnsi = (string)p_info->psz_name;
  130.             szAnsi += ": ";
  131.             szAnsi += p_info->psz_value;
  132.             tvi.pszText = (TCHAR *)_FROMMB( szAnsi.c_str() );
  133.             tvi.cchTextMax = _tcslen( tvi.pszText );
  134.             tvi.lParam = (LPARAM)3; // level 3
  135.             tvins.item = tvi;
  136.             tvins.hInsertAfter = hPrev;
  137.             tvins.hParent = hPrevLev2Item;
  138.  
  139.             // Add the item to the tree-view control.
  140.             hPrev = (HTREEITEM)TreeView_InsertItem( hwndTV, &tvins );
  141.         }
  142.         TreeView_Expand( hwndTV, hPrevLev2Item, TVE_EXPANDPARTIAL|TVE_EXPAND );
  143.     }
  144.     vlc_mutex_unlock( &inp_item->lock );
  145.     TreeView_Expand( hwndTV, hPrevRootItem, TVE_EXPANDPARTIAL|TVE_EXPAND );
  146.     return;
  147. }
  148. /***********************************************************************
  149. FUNCTION:
  150.   WndProc
  151. PURPOSE:
  152.   Processes messages sent to the main window.
  153.  
  154. ***********************************************************************/
  155. LRESULT FileInfo::WndProc( HWND hwnd, UINT msg, WPARAM wp, LPARAM lp )
  156. {
  157.     SHINITDLGINFO shidi;
  158.     switch( msg )
  159.     {
  160.     case WM_INITDIALOG:
  161.         shidi.dwMask = SHIDIM_FLAGS;
  162.         shidi.dwFlags = SHIDIF_DONEBUTTON | SHIDIF_SIPDOWN |
  163.             SHIDIF_FULLSCREENNOMENUBAR;//SHIDIF_SIZEDLGFULLSCREEN;
  164.         shidi.hDlg = hwnd;
  165.         SHInitDialog( &shidi );
  166.         CreateTreeView( hwnd );
  167.         UpdateWindow( hwnd );
  168.         SHFullScreen( GetForegroundWindow(), SHFS_HIDESIPBUTTON );
  169.         break;
  170.     case WM_CLOSE:
  171.         EndDialog( hwnd, LOWORD( wp ) );
  172.         break;
  173.     case WM_SETFOCUS:
  174.         SHSipPreference( hwnd, SIP_DOWN );
  175.         SHFullScreen( hwnd, SHFS_HIDESIPBUTTON );
  176.         break;
  177.     case WM_COMMAND:
  178.         if ( LOWORD(wp) == IDOK )
  179.         {
  180.             EndDialog( hwnd, LOWORD( wp ) );
  181.         }
  182.         break;
  183.     default:
  184.         break;
  185.     }
  186.     return FALSE;
  187. }