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

midi

开发平台:

Unix_Linux

  1. /*****************************************************************************
  2.  * open.cpp : WinCE gui plugin for VLC
  3.  *****************************************************************************
  4.  * Copyright (C) 2000-2004 the VideoLAN team
  5.  * $Id: e99e2dbaa7544cebbf9e72968820975bf8674533 $
  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_playlist.h>
  33. #include "wince.h"
  34. #include <windowsx.h>
  35. #include <commctrl.h>
  36. #include <commdlg.h>
  37. #include <shlobj.h>
  38. /*****************************************************************************
  39.  * Event Table.
  40.  *****************************************************************************/
  41. /* IDs for the controls and the menu commands */
  42. enum
  43. {
  44.     Notebook_Event = 1000,
  45.     MRL_Event,
  46.     FileBrowse_Event,
  47.     FileName_Event,
  48.     DiscType_Event,
  49.     DiscDevice_Event,
  50.     DiscTitle_Event,
  51.     DiscChapter_Event,
  52.     NetType_Event,
  53.     NetRadio1_Event, NetRadio2_Event, NetRadio3_Event, NetRadio4_Event,
  54.     NetPort1_Event, NetPort2_Event, NetPort3_Event,
  55.     NetAddr1_Event, NetAddr2_Event, NetAddr3_Event, NetAddr4_Event,
  56.     SubsFileEnable_Event,
  57.     SubsFileSettings_Event,
  58. };
  59. /*****************************************************************************
  60.  * AutoBuiltPanel.
  61.  *****************************************************************************/
  62. /*****************************************************************************
  63.  * Constructor.
  64.  *****************************************************************************/
  65. OpenDialog::OpenDialog( intf_thread_t *p_intf, CBaseWindow *p_parent,
  66.                         HINSTANCE h_inst, int _i_access, int _i_arg )
  67.   :  CBaseWindow( p_intf, p_parent, h_inst )
  68. {
  69.     /* Initializations */
  70.     i_access = _i_access;
  71.     i_open_arg = _i_arg;
  72.     for( int i = 0; i < 4; i++ )
  73.     {
  74.         net_radios[i] = 0;
  75.         net_label[i] = 0;
  76.         net_port_label[i] = 0;
  77.         net_ports[i] = 0;
  78.         hUpdown[i] = 0;
  79.         i_net_ports[i] = 0;
  80.         net_addrs_label[i] = 0;
  81.         net_addrs[i] = 0;
  82.     }
  83.     CreateWindow( _T("VLC WinCE"), _T("Messages"),
  84.                   WS_POPUP|WS_CAPTION|WS_SYSMENU|WS_SIZEBOX,
  85.                   0, 0, /*CW_USEDEFAULT*/300, /*CW_USEDEFAULT*/300,
  86.                   p_parent->GetHandle(), NULL, h_inst, (void *)this );
  87. }
  88. /***********************************************************************
  89. FUNCTION:
  90.   WndProc
  91. PURPOSE:
  92.   Processes messages sent to the main window.
  93.  
  94. ***********************************************************************/
  95. LRESULT OpenDialog::WndProc( HWND hwnd, UINT msg, WPARAM wp, LPARAM lp )
  96. {
  97.     SHINITDLGINFO shidi;
  98.     INITCOMMONCONTROLSEX  iccex;  // INITCOMMONCONTROLSEX structure
  99.     RECT rcClient;
  100.     TC_ITEM tcItem;
  101.     switch( msg )
  102.     {
  103.     case WM_CREATE:
  104.         shidi.dwMask = SHIDIM_FLAGS;
  105.         shidi.dwFlags = SHIDIF_DONEBUTTON | SHIDIF_FULLSCREENNOMENUBAR;
  106.         shidi.hDlg = hwnd;
  107.         SHInitDialog( &shidi );
  108.         // Get the client area rect to put the panels in
  109.         GetClientRect( hwnd, &rcClient );
  110.         /* Create MRL combobox */
  111.         mrl_box = CreateWindow( _T("STATIC"),
  112.                                 _FROMMB(_("Media Resource Locator (MRL)")),
  113.                                 WS_CHILD | WS_VISIBLE | SS_LEFT,
  114.                                 5, 10, rcClient.right, 15, hwnd, 0, hInst, 0 );
  115.         mrl_label = CreateWindow( _T("STATIC"), _FROMMB(_("Open:")),
  116.                                   WS_CHILD | WS_VISIBLE | SS_LEFT,
  117.                                   5, 10 + 15 + 10, 40, 15, hwnd, 0, hInst, 0 );
  118.         mrl_combo = CreateWindow( _T("COMBOBOX"), _T(""),
  119.                                   WS_CHILD | WS_VISIBLE | CBS_AUTOHSCROLL |
  120.                                   CBS_SORT | WS_VSCROLL, 45, 10 + 15 + 10 - 3,
  121.                                   rcClient.right - 50 - 5, 5*15 + 6, hwnd,
  122.                                   0, hInst, 0 );
  123.         // No tooltips for ComboBox
  124.         label = CreateWindow( _T("STATIC"),
  125.                               _FROMMB(_("Alternatively, you can build an MRL "
  126.                                        "using one of the following predefined "
  127.                                        "targets:" )),
  128.                               WS_CHILD | WS_VISIBLE | SS_LEFT,
  129.                               5, 10 + 2*(15 + 10), rcClient.right - 2*5, 2*15,
  130.                               hwnd, 0, hInst, 0 );
  131.         /* Create notebook */
  132.         iccex.dwSize = sizeof (INITCOMMONCONTROLSEX);
  133.         iccex.dwSize = ICC_TAB_CLASSES;
  134.         InitCommonControlsEx (&iccex);
  135.         notebook = CreateWindowEx( 0, WC_TABCONTROL, NULL,
  136.             WS_CHILD | WS_TABSTOP | WS_CLIPSIBLINGS | WS_VISIBLE,
  137.             5, 10 + 4*15 + 2*10, rcClient.right - 2*5,
  138.             rcClient.bottom - MENU_HEIGHT - 15 - 10 - 10 - (10 + 4*15 + 2*10),
  139.             hwnd, NULL, hInst, NULL );
  140.         tcItem.mask = TCIF_TEXT;
  141.         tcItem.pszText = _T("File");
  142.         TabCtrl_InsertItem( notebook, 0, &tcItem );
  143.         tcItem.pszText = _T("Network");
  144.         TabCtrl_InsertItem( notebook, 1, &tcItem );
  145.         switch( i_access )
  146.         {
  147.         case FILE_ACCESS:
  148.             TabCtrl_SetCurSel( notebook, 0 );
  149.             break;
  150.         case NET_ACCESS:
  151.             TabCtrl_SetCurSel( notebook, 1 );
  152.             break;
  153.         }
  154.         FilePanel( hwnd );
  155.         NetPanel( hwnd );
  156.         OnPageChange();
  157.         break;
  158.     case WM_CLOSE:
  159.         Show( FALSE );
  160.         return TRUE;
  161.     case WM_SETFOCUS:
  162.         SHFullScreen( hwnd, SHFS_SHOWSIPBUTTON );
  163.         SHSipPreference( hwnd, SIP_DOWN );
  164.         break;
  165.     case WM_COMMAND:
  166.         if( LOWORD(wp) == IDOK )
  167.         {
  168.             OnOk();
  169.             Show( FALSE );
  170.             break;
  171.         }
  172.         if( HIWORD(wp) == BN_CLICKED )
  173.         {
  174.             if( (HWND)lp == net_radios[0] )
  175.             {
  176.                 OnNetTypeChange( NetRadio1_Event );
  177.             } else if( (HWND)lp == net_radios[1] )
  178.             {
  179.                 OnNetTypeChange( NetRadio2_Event );
  180.             } else if( (HWND)lp == net_radios[2] )
  181.             {
  182.                 OnNetTypeChange( NetRadio3_Event );
  183.             } else if( (HWND)lp == net_radios[3] )
  184.             {
  185.                 OnNetTypeChange( NetRadio4_Event );
  186.             } else if( (HWND)lp == subsfile_checkbox )
  187.             {
  188.                 OnSubsFileEnable();
  189.             } else if( (HWND)lp == subsfile_button )
  190.             {
  191.                 OnSubsFileSettings( hwnd );
  192.             } else if( (HWND)lp == browse_button )
  193.             {
  194.                 OnFileBrowse();
  195.             }
  196.             break;
  197.         }
  198.         if( HIWORD(wp) == EN_CHANGE )
  199.         {
  200.             if( (HWND)lp == net_addrs[1] )
  201.             {
  202.                 OnNetPanelChange( NetAddr2_Event );
  203.             } else if( (HWND)lp == net_addrs[2] )
  204.             {
  205.                 OnNetPanelChange( NetAddr3_Event );
  206.             } else if( (HWND)lp == net_addrs[3] )
  207.             {
  208.                 OnNetPanelChange( NetAddr4_Event );
  209.             } else if( (HWND)lp == net_ports[0] )
  210.             {
  211.                 OnNetPanelChange( NetPort1_Event );
  212.             } else if( (HWND)lp == net_ports[1] )
  213.             {
  214.                 OnNetPanelChange( NetPort2_Event );
  215.             }
  216.         }
  217.         if( HIWORD(wp) == CBN_EDITUPDATE )
  218.         {
  219.             if ((HWND)lp == file_combo)
  220.             {
  221.                 OnFilePanelChange();
  222.             }
  223.         }
  224.         break;
  225.     case WM_NOTIFY:
  226.         if( (((NMHDR *)lp)->code) == TCN_SELCHANGE ) OnPageChange();
  227.         break;
  228.     default:
  229.         break;
  230.     }
  231.     return DefWindowProc( hwnd, msg, wp, lp );
  232. }
  233. /*****************************************************************************
  234.  * Private methods.
  235.  *****************************************************************************/
  236. void OpenDialog::FilePanel( HWND hwnd )
  237. {
  238.     RECT rc;
  239.     GetWindowRect( notebook, &rc );
  240.     /* Create browse file line */
  241.     file_combo = CreateWindow( _T("COMBOBOX"), _T(""),
  242.         WS_CHILD | WS_VISIBLE | CBS_AUTOHSCROLL | CBS_SORT | WS_VSCROLL,
  243.         rc.left + 10, rc.top + 10 - 3, rc.right - 10 - (rc.left + 10),
  244.         5*15 + 6, hwnd, NULL, hInst, NULL );
  245.     browse_button = CreateWindow( _T("BUTTON"), _T("Browse..."),
  246.         WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
  247.         rc.left + 10, rc.top + 10 + 15 + 10 - 3, 80, 15 + 6,
  248.         hwnd, NULL, hInst, NULL );
  249.     /* Create Subtitles File checkox */
  250.     subsfile_checkbox = CreateWindow( _T("BUTTON"), _T("Subtitle options"),
  251.         WS_CHILD | WS_VISIBLE | BS_AUTOCHECKBOX,
  252.         rc.left + 10, rc.top + 10 + 2*(15 + 10), 15, 15,
  253.         hwnd, NULL, hInst, NULL );
  254.     SendMessage( subsfile_checkbox, BM_SETCHECK, BST_UNCHECKED, 0 );
  255.     subsfile_label = CreateWindow( _T("STATIC"), _T("Subtitle options"),
  256.                 WS_CHILD | WS_VISIBLE | SS_LEFT,
  257.                 rc.left + 10 + 15 + 10, rc.top + 10 + 2*(15 + 10), 100, 15,
  258.                 hwnd, NULL, hInst, NULL);
  259.     subsfile_button = CreateWindow( _T("BUTTON"), _T("Settings..."),
  260.                 WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON | WS_DISABLED,
  261.                 rc.right - 80 - 10, rc.top + 10 + 2*(15 + 10) - 3, 80, 15 + 6,
  262.                 hwnd, NULL, hInst, NULL );
  263.     char *psz_subsfile = config_GetPsz( p_intf, "sub-file" );
  264.     if( psz_subsfile && *psz_subsfile )
  265.     {
  266.         SendMessage( subsfile_checkbox, BM_SETCHECK, BST_CHECKED, 0 );
  267.         EnableWindow( subsfile_button, TRUE );
  268.         string sz_subsfile = "sub-file=";
  269.         sz_subsfile += psz_subsfile;
  270.         subsfile_mrl.push_back( sz_subsfile );
  271.     }
  272.     free( psz_subsfile );
  273. }
  274. void OpenDialog::NetPanel( HWND hwnd )
  275. {
  276.     INITCOMMONCONTROLSEX ic;
  277.     TCHAR psz_text[256];
  278.     struct net_type
  279.     {
  280.         TCHAR *psz_text;
  281.         int length;
  282.     };
  283.     static struct net_type net_type_array[] =
  284.     {
  285.         { _T("UDP/RTP"), 82 },
  286.         { _T("UDP/RTP Multicast"), 140 },
  287.         { _T("HTTP/FTP/MMS"), 90 },
  288.         { _T("RTSP"), 30 }
  289.     };
  290.     RECT rc;
  291.     GetWindowRect( notebook, &rc);
  292.     /* UDP/RTP row */
  293.     net_radios[0] = CreateWindow( _T("BUTTON"), net_type_array[0].psz_text,
  294.                 WS_CHILD | WS_VISIBLE | BS_AUTORADIOBUTTON,
  295.                 rc.left + 5, rc.top + 10, 15, 15, hwnd, NULL, hInst, NULL );
  296.     net_label[0] = CreateWindow( _T("STATIC"), net_type_array[0].psz_text,
  297.                 WS_CHILD | WS_VISIBLE | SS_LEFT,
  298.                 rc.left + 5 + 15 + 5, rc.top + 10, net_type_array[0].length,
  299.                 15, hwnd, NULL, hInst, NULL );
  300.     i_net_ports[0] = config_GetInt( p_intf, "server-port" );
  301.     net_port_label[0] = CreateWindow( _T("STATIC"), _T("Port"),
  302.                 WS_CHILD | WS_VISIBLE | SS_LEFT,
  303.                 rc.left + 5 , rc.top + 10 + 2*(15 + 10), 30, 15,
  304.                 hwnd, NULL, hInst, NULL );
  305.     _stprintf( psz_text, _T("%d"), i_net_ports[0] );
  306.     net_ports[0] = CreateWindow( _T("EDIT"), psz_text,
  307.         WS_CHILD | WS_VISIBLE | WS_BORDER | SS_LEFT | ES_AUTOHSCROLL,
  308.         rc.left + 5 + 30 + 5, rc.top + 10 + 2*(15 + 10) - 3,
  309.         rc.right - 5 - (rc.left + 5 + 30 + 5), 15 + 6, hwnd, NULL, hInst, NULL );
  310.     ic.dwSize = sizeof(INITCOMMONCONTROLSEX);
  311.     ic.dwICC = ICC_UPDOWN_CLASS;
  312.     InitCommonControlsEx(&ic);
  313.     hUpdown[0] = CreateUpDownControl(
  314.                 WS_CHILD | WS_VISIBLE | WS_BORDER | UDS_ALIGNRIGHT |
  315.                 UDS_SETBUDDYINT | UDS_NOTHOUSANDS,
  316.                 0, 0, 0, 0, hwnd, 0, hInst,
  317.                 net_ports[0], 16000, 0, i_net_ports[0]);
  318.     /* UDP/RTP Multicast row */
  319.     net_radios[1] = CreateWindow( _T("BUTTON"), net_type_array[1].psz_text,
  320.                 WS_CHILD | WS_VISIBLE | BS_AUTORADIOBUTTON,
  321.                 rc.left + 5, rc.top + 10 + 15 + 10, 15, 15,
  322.                 hwnd, NULL, hInst, NULL);
  323.     net_label[1] = CreateWindow( _T("STATIC"), net_type_array[1].psz_text,
  324.                 WS_CHILD | WS_VISIBLE | SS_LEFT,
  325.                 rc.left + 5 + 15 + 5, rc.top + 10 + 15 + 10,
  326.                 net_type_array[1].length, 15, hwnd, NULL, hInst, NULL );
  327.     net_addrs_label[1] = CreateWindow( _T("STATIC"), _T("Address"),
  328.                 WS_CHILD | WS_VISIBLE | SS_LEFT,
  329.                 rc.left + 5 , rc.top + 10 + 2*(15 + 10), 50, 15,
  330.                 hwnd, NULL, hInst, NULL);
  331.     net_addrs[1] = CreateWindow( _T("EDIT"), _T(""),
  332.                 WS_CHILD | WS_VISIBLE | WS_BORDER | SS_LEFT | ES_AUTOHSCROLL,
  333.                 rc.left + 5 + 50 + 5, rc.top + 10 + 2*(15 + 10) - 3,
  334.                 rc.right - 5 - (rc.left + 5 + 50 + 5), 15 + 6,
  335.                 hwnd, NULL, hInst, NULL);
  336.     net_port_label[1] = CreateWindow( _T("STATIC"), _T("Port"),
  337.                 WS_CHILD | WS_VISIBLE | SS_LEFT,
  338.                 rc.left + 5 , rc.top + 10 + 3*(15 + 10), 30, 15,
  339.                 hwnd, NULL, hInst, NULL);
  340.     i_net_ports[1] = i_net_ports[0];
  341.     _stprintf( psz_text, _T("%d"), i_net_ports[1] );
  342.     net_ports[1] = CreateWindow( _T("EDIT"), psz_text,
  343.                 WS_CHILD | WS_VISIBLE | WS_BORDER | SS_LEFT | ES_AUTOHSCROLL,
  344.                 rc.left + 5 + 30 + 5, rc.top + 10 + 3*(15 + 10) - 3,
  345.                 rc.right - 5 -(rc.left + 5 + 30 + 5), 15 + 6,
  346.                 hwnd, NULL, hInst, NULL );
  347.     ic.dwSize = sizeof(INITCOMMONCONTROLSEX);
  348.     ic.dwICC = ICC_UPDOWN_CLASS;
  349.     InitCommonControlsEx(&ic);
  350.     hUpdown[1] = CreateUpDownControl( WS_CHILD | WS_VISIBLE | WS_BORDER |
  351.         UDS_ALIGNRIGHT | UDS_SETBUDDYINT | UDS_NOTHOUSANDS,
  352.         0, 0, 0, 0, hwnd, 0, hInst,
  353.         net_ports[1], 16000, 0, i_net_ports[1] );
  354.     /* HTTP and RTSP rows */
  355.     net_radios[2] = CreateWindow( _T("BUTTON"), net_type_array[2].psz_text,
  356.         WS_CHILD | WS_VISIBLE | BS_AUTORADIOBUTTON,
  357.         rc.left + 5 + 15 + 5 + net_type_array[0].length + 5,
  358.         rc.top + 10, 15, 15, hwnd, NULL, hInst, NULL );
  359.  
  360.     net_label[2] = CreateWindow( _T("STATIC"), net_type_array[2].psz_text,
  361.         WS_CHILD | WS_VISIBLE | SS_LEFT,
  362.         rc.left + 5 + 15 + 5 + net_type_array[0].length + 5 + 15 + 5,
  363.         rc.top + 10, net_type_array[2].length, 15,
  364.         hwnd, NULL, hInst, NULL );
  365.     net_addrs_label[2] = CreateWindow( _T("STATIC"), _T("URL"),
  366.         WS_CHILD | WS_VISIBLE | SS_LEFT,
  367.         rc.left + 5 , rc.top + 10 + 2*(15 + 10), 30, 15,
  368.         hwnd, NULL, hInst, NULL );
  369.     net_addrs[2] = CreateWindow( _T("EDIT"), _T(""),
  370.         WS_CHILD | WS_VISIBLE | WS_BORDER | SS_LEFT | ES_AUTOHSCROLL,
  371.         rc.left + 5 + 30 + 5, rc.top + 10 + 2*(15 + 10) - 3,
  372.         rc.right - 5 - (rc.left + 5 + 30 + 5), 15 + 6,
  373.         hwnd, NULL, hInst, NULL);
  374.     net_radios[3] = CreateWindow( _T("BUTTON"), net_type_array[3].psz_text,
  375.         WS_CHILD | WS_VISIBLE | BS_AUTORADIOBUTTON,
  376.         rc.left + 5 + 15 + 5 + net_type_array[1].length + 5,
  377.         rc.top + 10 + 15 + 10, 15, 15, hwnd, NULL, hInst, NULL );
  378.     net_label[3] = CreateWindow( _T("STATIC"), net_type_array[3].psz_text,
  379.         WS_CHILD | WS_VISIBLE | SS_LEFT,
  380.         rc.left + 5 + 15 + 5 + net_type_array[1].length + 5 + 15 + 5,
  381.         rc.top + 10 + 15 + 10, net_type_array[3].length, 15,
  382.         hwnd, NULL, hInst, NULL );
  383.     net_addrs_label[3] = CreateWindow( _T("STATIC"), _T("URL"),
  384.         WS_CHILD | WS_VISIBLE | SS_LEFT,
  385.         rc.left + 5 , rc.top + 10 + 2*(15 + 10), 30, 15,
  386.         hwnd, NULL, hInst, NULL );
  387.     net_addrs[3] = CreateWindow( _T("EDIT"), _T("rtsp://"),
  388.         WS_CHILD | WS_VISIBLE | WS_BORDER | SS_LEFT | ES_AUTOHSCROLL,
  389.         rc.left + 5 + 30 + 5, rc.top + 10 + 2*(15 + 10) - 3,
  390.         rc.right - 5 - (rc.left + 5 + 30 + 5), 15 + 6,
  391.         hwnd, NULL, hInst, NULL );
  392.     SendMessage( net_radios[0], BM_SETCHECK, BST_CHECKED, 0 );
  393. }
  394. void OpenDialog::UpdateMRL()
  395. {
  396.     UpdateMRL( i_access );
  397. }
  398. void OpenDialog::UpdateMRL( int i_access_method )
  399. {
  400.     string demux, mrltemp;
  401.     TCHAR psz_text[2048];
  402.     char psz_tmp[256];
  403.     i_access = i_access_method;
  404.     switch( i_access_method )
  405.     {
  406.     case FILE_ACCESS:
  407.         GetWindowText( file_combo, psz_text, 2048 );
  408.         mrltemp = _TOMB(psz_text);
  409.         break;
  410.     case NET_ACCESS:
  411.         switch( i_net_type )
  412.         {
  413.         case 0:
  414.             mrltemp = "udp" + demux + "://";
  415.             if( i_net_ports[0] !=
  416.                 config_GetInt( p_intf, "server-port" ) )
  417.             {
  418.                 sprintf( psz_tmp, "@:%d", i_net_ports[0] );
  419.                 mrltemp += psz_tmp;
  420.             }
  421.             break;
  422.         case 1:
  423.             mrltemp = "udp" + demux + "://@";
  424.             Edit_GetText( net_addrs[1], psz_text, 2048 );
  425.             mrltemp += _TOMB(psz_text);
  426.             if( i_net_ports[1] != config_GetInt( p_intf, "server-port" ) )
  427.             {
  428.                 sprintf( psz_tmp, ":%d", i_net_ports[1] );
  429.                 mrltemp += psz_tmp;
  430.             }
  431.             break;
  432.         case 2:
  433.             /* http access */
  434.             Edit_GetText( net_addrs[2], psz_text, 2048 );
  435.             if( !strstr( _TOMB(psz_text), "http://" ) )
  436.             {
  437.                 mrltemp = "http" + demux + "://";
  438.             }
  439.             mrltemp += _TOMB(psz_text);
  440.             break;
  441.         case 3:
  442.             /* RTSP access */
  443.             Edit_GetText( net_addrs[3], psz_text, 2048 );
  444.             if( !strstr( _TOMB(psz_text), "rtsp://" ) )
  445.             {
  446.                 mrltemp = "rtsp" + demux + "://";
  447.             }
  448.             mrltemp += _TOMB(psz_text);
  449.             break;
  450.         }
  451.         break;
  452.     default:
  453.         break;
  454.     }
  455.     SetWindowText( mrl_combo, _FROMMB(mrltemp.c_str()) );
  456. }
  457. void OpenDialog::OnPageChange()
  458. {
  459.     if( TabCtrl_GetCurSel( notebook ) == 0 )
  460.     {
  461.         for( int i=0; i<4; i++ )
  462.         {
  463.             SetWindowPos( net_radios[i], HWND_BOTTOM, 0, 0, 0, 0,
  464.                           SWP_NOMOVE | SWP_NOSIZE );
  465.             SetWindowPos( net_label[i], HWND_BOTTOM, 0, 0, 0, 0,
  466.                           SWP_NOMOVE | SWP_NOSIZE );
  467.         }
  468.         DisableNETCtrl();
  469.         SetWindowPos( file_combo, HWND_TOP, 0, 0, 0, 0,
  470.                       SWP_NOMOVE | SWP_NOSIZE );
  471.         SetWindowPos( browse_button, HWND_TOP, 0, 0, 0, 0,
  472.                       SWP_NOMOVE | SWP_NOSIZE );
  473.         SetWindowPos( subsfile_checkbox, HWND_TOP, 0, 0, 0, 0,
  474.                       SWP_NOMOVE | SWP_NOSIZE );
  475.         SetWindowPos( subsfile_label, HWND_TOP, 0, 0, 0, 0,
  476.                       SWP_NOMOVE | SWP_NOSIZE );
  477.         SetWindowPos( subsfile_button, HWND_TOP, 0, 0, 0, 0,
  478.                       SWP_NOMOVE | SWP_NOSIZE );
  479.         i_access = FILE_ACCESS;
  480.     }
  481.     else if ( TabCtrl_GetCurSel( notebook ) == 1 )
  482.     {
  483.         SetWindowPos( file_combo, HWND_BOTTOM, 0, 0, 0, 0,
  484.                       SWP_NOMOVE | SWP_NOSIZE );
  485.         SetWindowPos( browse_button, HWND_BOTTOM, 0, 0, 0, 0,
  486.                       SWP_NOMOVE | SWP_NOSIZE );
  487.         SetWindowPos( subsfile_checkbox, HWND_BOTTOM, 0, 0, 0, 0,
  488.                       SWP_NOMOVE | SWP_NOSIZE );
  489.         SetWindowPos( subsfile_label, HWND_BOTTOM, 0, 0, 0, 0,
  490.                       SWP_NOMOVE | SWP_NOSIZE );
  491.         SetWindowPos( subsfile_button, HWND_BOTTOM, 0, 0, 0, 0,
  492.                       SWP_NOMOVE | SWP_NOSIZE );
  493.         for( int i=0; i<4; i++ )
  494.         {
  495.             SetWindowPos( net_radios[i], HWND_TOP, 0, 0, 0, 0,
  496.                           SWP_NOMOVE | SWP_NOSIZE );
  497.             SendMessage( net_radios[i], BM_SETCHECK, BST_UNCHECKED, 0 );
  498.             SetWindowPos( net_label[i], HWND_TOP, 0, 0, 0, 0,
  499.                           SWP_NOMOVE | SWP_NOSIZE );
  500.         }
  501.         SetWindowPos( net_port_label[0], HWND_TOP, 0, 0, 0, 0,
  502.                       SWP_NOMOVE | SWP_NOSIZE );
  503.         SetWindowPos( net_ports[0], HWND_TOP, 0, 0, 0, 0,
  504.                       SWP_NOMOVE | SWP_NOSIZE );
  505.         SetWindowPos( hUpdown[0], HWND_TOP, 0, 0, 0, 0,
  506.                       SWP_NOMOVE | SWP_NOSIZE );
  507.         SendMessage( net_radios[0], BM_SETCHECK, BST_CHECKED, 0 );
  508.         i_access = NET_ACCESS;
  509.     }
  510.     UpdateMRL();
  511. }
  512. void OpenDialog::OnOk()
  513. {
  514.     TCHAR psz_text[2048];
  515.     GetWindowText( mrl_combo, psz_text, 2048 );
  516.     int i_args;
  517.     /*char **pp_args = vlc_parse_cmdline( _TOMB(psz_text), &i_args );
  518.     ComboBox_AddString( mrl_combo, psz_text );
  519.     if( ComboBox_GetCount( mrl_combo ) > 10 )
  520.         ComboBox_DeleteString( mrl_combo, 0 );
  521.     ComboBox_SetCurSel( mrl_combo, ComboBox_GetCount( mrl_combo ) - 1 );*/
  522.     /* Update the playlist */
  523.     playlist_t *p_playlist = pl_Hold( p_intf );
  524.     if( p_playlist == NULL ) return;
  525.  /*   for( int i = 0; i < i_args; i++ )
  526.     {
  527.         bool b_start = !i && i_open_arg;
  528.         playlist_item_t *p_item =
  529.             playlist_ItemNew( p_playlist, pp_args[i], pp_args[i] );
  530.         /* Insert options */
  531. /*        while( i + 1 < i_args && pp_args[i + 1][0] == ':' )
  532.         {
  533.             playlist_ItemAddOption( p_item, pp_args[i + 1] );
  534.             i++;
  535.         }*/
  536.         /* Get the options from the subtitles dialog */
  537. /*        if( (SendMessage( subsfile_checkbox, BM_GETCHECK, 0, 0 ) & BST_CHECKED)
  538.             && subsfile_mrl.size() )
  539.         {
  540.             for( int j = 0; j < (int)subsfile_mrl.size(); j++ )
  541.             {
  542.                 playlist_ItemAddOption( p_item, subsfile_mrl[j].c_str() );
  543.             }
  544.         }
  545.         if( b_start )
  546.         {
  547.             playlist_AddItem( p_playlist, p_item,
  548.                               PLAYLIST_APPEND|PLAYLIST_GO, PLAYLIST_END );
  549.         }
  550.         else
  551.         {
  552.             playlist_AddItem( p_playlist, p_item,
  553.                               PLAYLIST_APPEND, PLAYLIST_END );
  554.         }
  555.     }
  556.     //TogglePlayButton( PLAYING_S );
  557.     while( i_args-- )
  558.     {
  559.         free( pp_args[i_args] );
  560.         if( !i_args ) free( pp_args );
  561.     }*/
  562.     pl_Release( p_intf );
  563. }
  564. /*****************************************************************************
  565.  * File panel event methods.
  566.  *****************************************************************************/
  567. void OpenDialog::OnFilePanelChange()
  568. {
  569.     UpdateMRL( FILE_ACCESS );
  570. }
  571. static void OnOpenCB( intf_dialog_args_t *p_arg )
  572. {
  573.     OpenDialog *p_this = (OpenDialog *)p_arg->p_arg;
  574.     char psz_tmp[PATH_MAX+2] = "";
  575.     if( p_arg->i_results && p_arg->psz_results[0] )
  576.     {
  577.         if( strchr( p_arg->psz_results[0], ' ' ) )
  578.         {
  579.             strcat( psz_tmp, """ );
  580.             strcat( psz_tmp, p_arg->psz_results[0] );
  581.             strcat( psz_tmp, """ );
  582.         }
  583.         else strcat( psz_tmp, p_arg->psz_results[0] );
  584.         SetWindowText( p_this->file_combo, _FROMMB(psz_tmp) );
  585.         ComboBox_AddString( p_this->file_combo, _FROMMB(psz_tmp) );
  586.         if( ComboBox_GetCount( p_this->file_combo ) > 10 )
  587.             ComboBox_DeleteString( p_this->file_combo, 0 );
  588.         p_this->UpdateMRL( FILE_ACCESS );
  589.     }
  590. }
  591. void OpenDialog::OnFileBrowse()
  592. {
  593.     intf_dialog_args_t *p_arg =
  594.         (intf_dialog_args_t *)malloc( sizeof(intf_dialog_args_t) );
  595.     memset( p_arg, 0, sizeof(intf_dialog_args_t) );
  596.     p_arg->psz_title = strdup( "Open file" );
  597.     p_arg->psz_extensions = strdup( "All (*.*)|*.*" );
  598.     p_arg->p_arg = this;
  599.     p_arg->pf_callback = OnOpenCB;
  600.     p_intf->p_sys->pf_show_dialog( p_intf, INTF_DIALOG_FILE_GENERIC, 0, p_arg);
  601. }
  602. /*****************************************************************************
  603.  * Net panel event methods.
  604.  *****************************************************************************/
  605. void OpenDialog::OnNetPanelChange( int event )
  606. {
  607.     TCHAR psz_text[2048];
  608.     int port;
  609.     if( event >= NetPort1_Event && event <= NetPort2_Event )
  610.     {
  611.         Edit_GetText( net_ports[event - NetPort1_Event], psz_text, 2048 );
  612.         _stscanf( psz_text, _T("%d"), &port );
  613.         i_net_ports[event - NetPort1_Event] = port;
  614.     }
  615.     UpdateMRL( NET_ACCESS );
  616. }
  617. void OpenDialog::OnNetTypeChange( int event )
  618. {
  619.     DisableNETCtrl();
  620.     i_net_type = event - NetRadio1_Event;
  621.     if( event == NetRadio1_Event )
  622.     {
  623.         SetWindowPos( net_port_label[0], HWND_TOP, 0, 0, 0, 0,
  624.                       SWP_NOMOVE | SWP_NOSIZE );
  625.         SetWindowPos( net_ports[0], HWND_TOP, 0, 0, 0, 0,
  626.                       SWP_NOMOVE | SWP_NOSIZE );
  627.         SetWindowPos( hUpdown[0], HWND_TOP, 0, 0, 0, 0,
  628.                       SWP_NOMOVE | SWP_NOSIZE );
  629.     }
  630.     else if( event == NetRadio2_Event )
  631.     {
  632.         SetWindowPos( net_addrs_label[1], HWND_TOP, 0, 0, 0, 0,
  633.                       SWP_NOMOVE | SWP_NOSIZE );
  634.         SetWindowPos( net_addrs[1], HWND_TOP, 0, 0, 0, 0,
  635.                       SWP_NOMOVE | SWP_NOSIZE );
  636.         SetWindowPos( net_port_label[1], HWND_TOP, 0, 0, 0, 0,
  637.                       SWP_NOMOVE | SWP_NOSIZE );
  638.         SetWindowPos( net_ports[1], HWND_TOP, 0, 0, 0, 0,
  639.                       SWP_NOMOVE | SWP_NOSIZE );
  640.         SetWindowPos( hUpdown[1], HWND_TOP, 0, 0, 0, 0,
  641.                       SWP_NOMOVE | SWP_NOSIZE );
  642.     }
  643.     else if( event == NetRadio3_Event )
  644.     {
  645.         SetWindowPos( net_addrs_label[2], HWND_TOP, 0, 0, 0, 0,
  646.                       SWP_NOMOVE | SWP_NOSIZE );
  647.         SetWindowPos( net_addrs[2], HWND_TOP, 0, 0, 0, 0,
  648.                       SWP_NOMOVE | SWP_NOSIZE );
  649.     }
  650.     else if( event == NetRadio4_Event )
  651.     {
  652.         SetWindowPos( net_addrs_label[3], HWND_TOP, 0, 0, 0, 0,
  653.                       SWP_NOMOVE | SWP_NOSIZE );
  654.         SetWindowPos( net_addrs[3], HWND_TOP, 0, 0, 0, 0,
  655.                       SWP_NOMOVE | SWP_NOSIZE );
  656.     }
  657.  
  658.     UpdateMRL( NET_ACCESS );
  659. }
  660. void OpenDialog::DisableNETCtrl()
  661. {
  662.     for( int i=0; i<4; i++ )
  663.     {
  664.         SetWindowPos( net_port_label[i], HWND_BOTTOM, 0, 0, 0, 0,
  665.                       SWP_NOMOVE | SWP_NOSIZE );
  666.         SetWindowPos( net_ports[i], HWND_BOTTOM, 0, 0, 0, 0,
  667.                       SWP_NOMOVE | SWP_NOSIZE );
  668.         SetWindowPos( hUpdown[i], HWND_BOTTOM, 0, 0, 0, 0,
  669.                       SWP_NOMOVE | SWP_NOSIZE );
  670.         SetWindowPos( net_addrs_label[i], HWND_BOTTOM, 0, 0, 0, 0,
  671.                       SWP_NOMOVE | SWP_NOSIZE );
  672.         SetWindowPos( net_addrs[i], HWND_BOTTOM, 0, 0, 0, 0,
  673.                       SWP_NOMOVE | SWP_NOSIZE );
  674.     }
  675.     UpdateMRL( FILE_ACCESS );
  676. }
  677. /*****************************************************************************
  678.  * Subtitles file event methods.
  679.  *****************************************************************************/
  680. void OpenDialog::OnSubsFileEnable()
  681. {
  682.     EnableWindow( subsfile_button, ( SendMessage( subsfile_checkbox,
  683.                   BM_GETCHECK, 0, 0 ) & BST_CHECKED ) ? TRUE : FALSE );
  684. }
  685. void OpenDialog::OnSubsFileSettings( HWND hwnd )
  686. {
  687.     /* Show/hide the open dialog */
  688.     SubsFileDialog *subsfile_dialog = new SubsFileDialog( p_intf, this, hInst);
  689.     CreateDialogBox(  hwnd, subsfile_dialog );
  690.     subsfile_mrl.clear();
  691.     for( int i = 0; i < (int)subsfile_dialog->subsfile_mrl.size(); i++ )
  692.         subsfile_mrl.push_back( subsfile_dialog->subsfile_mrl[i] );
  693.     delete subsfile_dialog;
  694. }