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

midi

开发平台:

Unix_Linux

  1. /*****************************************************************************
  2.  * messages.cpp : WinCE gui plugin for VLC
  3.  *****************************************************************************
  4.  * Copyright (C) 2000-2004 the VideoLAN team
  5.  * $Id: 8cd1759bc0e95b2e75a3c40087b31219a7404dd5 $
  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 "wince.h"
  33. #include <winuser.h>
  34. #include <windows.h>
  35. #include <windowsx.h>
  36. #include <commctrl.h>
  37. #include <commdlg.h>
  38. #ifndef NMAXFILE
  39. #define NMAXFILE 512 // at least 256
  40. #endif
  41. #ifndef TEXTMAXBUF
  42. #define TEXTMAXBUF 512 // at least 500
  43. #endif
  44. /*****************************************************************************
  45.  * Constructor.
  46.  *****************************************************************************/
  47. Messages::Messages( intf_thread_t *p_intf, CBaseWindow *p_parent,
  48.                     HINSTANCE h_inst )
  49.   :  CBaseWindow( p_intf, p_parent, h_inst )
  50. {
  51.     /* Initializations */
  52.     hListView = NULL;
  53.     hWnd = CreateWindow( _T("VLC WinCE"), _T("Messages"),
  54.                          WS_POPUP|WS_CAPTION|WS_SYSMENU|WS_SIZEBOX,
  55.                          0, 0, /*CW_USEDEFAULT*/300, /*CW_USEDEFAULT*/300,
  56.                          p_parent->GetHandle(), NULL, h_inst, (void *)this );
  57.         // Suscribe to messages bank
  58.     cb_data = new msg_cb_data_t;
  59.     cb_data->self = this;
  60.     sub = msg_Subscribe( p_intf->p_libvlc, sinkMessage, cb_data );
  61. }
  62. Messages::~Messages()
  63. {
  64.     msg_Unsubscribe(sub);
  65.     delete cb_data;
  66. }
  67. /***********************************************************************
  68. FUNCTION:
  69.   WndProc
  70. PURPOSE:
  71.   Processes messages sent to the main window.
  72. ***********************************************************************/
  73. LRESULT Messages::WndProc( HWND hwnd, UINT msg, WPARAM wp, LPARAM lp )
  74. {
  75.     SHINITDLGINFO shidi;
  76.     TCHAR psz_text[TEXTMAXBUF];
  77.     OPENFILENAME ofn;
  78.     int i_dummy;
  79.     HANDLE fichier;
  80.     switch( msg )
  81.     {
  82.     case WM_CREATE:
  83.         shidi.dwMask = SHIDIM_FLAGS;
  84.         shidi.dwFlags = SHIDIF_DONEBUTTON | SHIDIF_SIPDOWN |
  85.             SHIDIF_FULLSCREENNOMENUBAR;//SHIDIF_SIZEDLGFULLSCREEN;
  86.         shidi.hDlg = hwnd;
  87.         SHInitDialog( &shidi );
  88.         hListView = CreateWindow( WC_LISTVIEW, NULL,
  89.                                   WS_VISIBLE | WS_CHILD | LVS_REPORT |
  90.                                   LVS_SHOWSELALWAYS | WS_VSCROLL | WS_HSCROLL |
  91.                                   WS_BORDER | LVS_NOCOLUMNHEADER, 0, 0, 0, 0,
  92.                                   hwnd, NULL, hInst, NULL );
  93.         ListView_SetExtendedListViewStyle( hListView, LVS_EX_FULLROWSELECT );
  94.         LVCOLUMN lv;
  95.         lv.mask = LVCF_FMT;
  96.         lv.fmt = LVCFMT_LEFT ;
  97.         ListView_InsertColumn( hListView, 0, &lv );
  98.         SetTimer( hwnd, 1, 500 /*milliseconds*/, NULL );
  99.         break;
  100.     case WM_WINDOWPOSCHANGED:
  101.         {
  102.             RECT rect;
  103.             if( !GetClientRect( hwnd, &rect ) ) break;
  104.             SetWindowPos( hListView, 0, 0, 0,
  105.                           rect.right - rect.left, rect.bottom - rect.top, 0 );
  106.             LVCOLUMN lv;
  107.             lv.cx = rect.right - rect.left;
  108.             lv.mask = LVCF_WIDTH;
  109.             ListView_SetColumn( hListView, 0, &lv );
  110.         }
  111.         break;
  112.     case WM_SETFOCUS:
  113.         SHSipPreference( hwnd, SIP_DOWN );
  114.         SHFullScreen( hwnd, SHFS_HIDESIPBUTTON );
  115.         break;
  116.     case WM_CLOSE:
  117.         Show( FALSE );
  118.         return TRUE;
  119.     case WM_COMMAND:
  120.         switch( LOWORD(wp) )
  121.         {
  122.         case IDOK:
  123.             Show( FALSE );
  124.             break;
  125.         case IDCLEAR:
  126.             ListView_DeleteAllItems( hListView );
  127.             break;
  128.         case IDSAVEAS:
  129.             memset( &(ofn), 0, sizeof(ofn) );
  130.             ofn.lStructSize = sizeof(ofn);
  131.             ofn.hwndOwner = hwnd;
  132.             ofn.lpstrFile = _T("");
  133.             ofn.nMaxFile = NMAXFILE;
  134.             ofn.lpstrFilter = _T("Text (*.txt)*.txt");
  135.             ofn.lpstrTitle = _T("Save File As");
  136.             ofn.Flags = OFN_HIDEREADONLY;
  137.             ofn.lpstrDefExt = _T("txt");
  138.             if( GetSaveFileName( (LPOPENFILENAME)&ofn ) )
  139.             {
  140.                 fichier = CreateFile( ofn.lpstrFile, GENERIC_WRITE,
  141.                                       FILE_SHARE_READ|FILE_SHARE_WRITE,
  142.                                       NULL, CREATE_ALWAYS,
  143.                                       FILE_ATTRIBUTE_NORMAL, NULL );
  144.                 if( fichier != INVALID_HANDLE_VALUE )
  145.                 {
  146.                     int n;
  147.                     //SetFilePointer( fichier, 0, NULL, FILE_END );
  148.                     for( n = 0; n < ListView_GetItemCount( hListView ); n++ )
  149.                     {
  150.                         ListView_GetItemText( hListView, n, 0, psz_text,
  151.                                               TEXTMAXBUF );
  152.                         string text_out = (string)_TOMB(psz_text) + "n";
  153.                         WriteFile( fichier, text_out.c_str(), text_out.size(),
  154.                                    (LPDWORD)&i_dummy, NULL );
  155.                     }
  156.                     FlushFileBuffers( fichier );
  157.                     CloseHandle(fichier);
  158.                 }
  159.             }
  160.             break;
  161.         default:
  162.             break;
  163.         }
  164.     default:
  165.         break;
  166.     }
  167.     return DefWindowProc( hwnd, msg, wp, lp );
  168. }
  169. void Messages::sinkMessage (msg_cb_data_t *data, msg_item_t *item,
  170.                                   unsigned overruns)
  171. {
  172.     Messages *self = data->self;
  173.     self->sinkMessage (item, overruns);
  174. }
  175. void Messages::sinkMessage (msg_item_t *item, unsigned overruns)
  176. {
  177.     vlc_value_t val;
  178.     var_Get( p_intf->p_libvlc, "verbose", &val );
  179.     /* Append all messages to log window */
  180.     string debug = item->psz_module;
  181.     switch( item->i_type )
  182.     {
  183.         case VLC_MSG_INFO: debug += ": "; break;
  184.         case VLC_MSG_ERR: debug += " error: "; break;
  185.         case VLC_MSG_WARN: debug += " warning: "; break;
  186.         default: debug += " debug: "; break;
  187.     }
  188.     /* Add message */
  189.     debug += item->psz_msg;
  190.     LVITEM lv;
  191.     lv.mask = LVIF_TEXT;
  192.     lv.pszText = TEXT("");
  193.     lv.cchTextMax = 1;
  194.     lv.iSubItem = 0;
  195.     lv.iItem = ListView_GetItemCount( hListView );
  196.     ListView_InsertItem( hListView, &lv );
  197.     ListView_SetItemText( hListView, lv.iItem, 0,
  198.                           (TCHAR *)_FROMMB(debug.c_str()) );
  199. }