]> git.sesse.net Git - vlc/commitdiff
* Added a win32 interface plugin, developed with Borland C++ Builder.
authorOlivier Teulière <ipkiss@videolan.org>
Mon, 25 Mar 2002 23:36:57 +0000 (23:36 +0000)
committerOlivier Teulière <ipkiss@videolan.org>
Mon, 25 Mar 2002 23:36:57 +0000 (23:36 +0000)
   To build the plugin, follow the instructions in INSTALL-win32.txt

 * Known bugs:
        - subtitles don't work
        - a crash occurs when the user exits by pressing 'q' in the vout
        - when moving the slider, position in the stream updates even if
          the slider isn't released yet

 * TODO list:
        - clean code in menu.cpp
        - adapt lool's enhancements of the Gtk+ preferences box
        - write drag-and-drop stuff
        - and of course, fix known bugs :)

 * For those of you who can't wait till the next release to test the win32
   interface, binary files are available here:
   http://www.via.ecp.fr/~ipkiss/intfwin/vlc.zip
   Enjoy!

34 files changed:
INSTALL-win32.txt
include/common.h
plugins/win32/about.cpp [new file with mode: 0644]
plugins/win32/about.dfm [new file with mode: 0644]
plugins/win32/about.h [new file with mode: 0644]
plugins/win32/control.cpp [new file with mode: 0644]
plugins/win32/control.h [new file with mode: 0644]
plugins/win32/disc.cpp [new file with mode: 0644]
plugins/win32/disc.dfm [new file with mode: 0644]
plugins/win32/disc.h [new file with mode: 0644]
plugins/win32/intf_win32.cpp [new file with mode: 0644]
plugins/win32/intfwin.bpf [new file with mode: 0644]
plugins/win32/intfwin.bpr [new file with mode: 0644]
plugins/win32/mainframe.cpp [new file with mode: 0644]
plugins/win32/mainframe.dfm [new file with mode: 0644]
plugins/win32/mainframe.h [new file with mode: 0644]
plugins/win32/menu.cpp [new file with mode: 0644]
plugins/win32/menu.h [new file with mode: 0644]
plugins/win32/messages.cpp [new file with mode: 0644]
plugins/win32/messages.dfm [new file with mode: 0644]
plugins/win32/messages.h [new file with mode: 0644]
plugins/win32/network.cpp [new file with mode: 0644]
plugins/win32/network.dfm [new file with mode: 0644]
plugins/win32/network.h [new file with mode: 0644]
plugins/win32/playlist.cpp [new file with mode: 0644]
plugins/win32/playlist.dfm [new file with mode: 0644]
plugins/win32/playlist.h [new file with mode: 0644]
plugins/win32/preferences.cpp [new file with mode: 0644]
plugins/win32/preferences.dfm [new file with mode: 0644]
plugins/win32/preferences.h [new file with mode: 0644]
plugins/win32/win32.cpp
plugins/win32/win32.h [new file with mode: 0644]
plugins/win32/win32_common.h [new file with mode: 0644]
share/vlc48x48.ico [new file with mode: 0644]

index 9865f79d83595b5d05aa15cf06e64875665b0350..3e2183ca40750f3f15dffc49f798a61cde0c989c 100644 (file)
@@ -11,14 +11,12 @@ to use the command line arguments. You can obtain a list of these command
 line arguments by typing 'vlc --help'.
 It is also sometimes useful to display vlc's debug console. You can do so
 by running 'vlc -v'.
-This feature is at the moment broken. To display vlc's debug messages,
-open the menu 'view', select 'messages'.
 To store a debug log of the current vlc session, you can use
 'vlc -vvv --stdout=debug.txt'.
 
 If you want to play a DVD, run vlc and click on the Disc option in the
 interface. You then have to type your drive letter in the 'Device name'
-box including the final '\' (eg. 'D:\' if your dvdrom drive is assigned the letter 'D').
+box (eg. 'D:' if your dvdrom drive is assigned the letter 'D').
 ( !Warning: you have to be in administrator mode (for now) on Win2k )
 
 
@@ -60,8 +58,7 @@ See `./configure --help' for more information.
 For example if you are cross-compiling from Debian, you can use something
 along those lines:
 
- make distclean ; CC=i586-mingw32msvc-gcc CFLAGS=-I/usr/i586-mingw32msvc \
-   RANLIB=i586-mingw32msvc-ranlib WINDRES=i586-mingw32msvc-windres \
+ make distclean ; CC=i586-mingw32msvc-gcc \
    ./configure --host=i586-mingw32msvc --target=i586-mingw32msvc \
     --build=i386-linux --with-gtk-config-path=/usr/i586-mingw32msvc/bin \
     --with-sdl-config-path=/usr/i586-mingw32msvc/bin
@@ -95,5 +92,31 @@ If you are using the tools from http://www.libsdl.org/Xmingw32/ you can type som
  PATH=/usr/local/cross-tools/bin:/usr/local/cross-tools/i386-mingw32msvc/bin:$PATH \
    make
 
+Building Win32 interface with bcc32 (Borland's compiler)
+========================================================
+
+[Steps 2 and 3 are temporary]
+
+1) Compile vlc as usual.
+include\defs.h should be generated.
+
+2) Edit include\defs.h, and add the following lines if necessary:
+#define WIN32
+#define MODULE_NAME win32
+#define MODULE_NAME_IS win32
+#define PLUGIN
+#define HAVE_DYNAMIC_PLUGINS
+
+3) Still in defs.h, comment the following line to avoid compilation warnings:
+#define PACKAGE "vlc"
+
+4) From the plugin\win32 directory, use Borland C++ command-line tools
+as follows:
+bpr2mak intfwin.bpr    // Create a makefile from intfwin.bpr
+make -fintfwin                 // It's Borland's make utility !
+
+5) This should create a intfwin.so
+You can remove any other generated file.
+
 
 Well done, now you're ready to use vlc!
index c9b07cfd366b7eee64635cd444375274bf712f95..2b53a94d1c9cdc0049d715044b6c1c91055d7747 100644 (file)
@@ -3,7 +3,7 @@
  * Collection of useful common types and macros definitions
  *****************************************************************************
  * Copyright (C) 1998, 1999, 2000 VideoLAN
- * $Id: common.h,v 1.88 2002/03/19 04:22:02 ipkiss Exp $
+ * $Id: common.h,v 1.89 2002/03/25 23:36:57 ipkiss Exp $
  *
  * Authors: Samuel Hocevar <sam@via.ecp.fr>
  *          Vincent Seguin <seguin@via.ecp.fr>
@@ -425,7 +425,7 @@ typedef __int64 off_t;
 
 #   if defined( __BORLANDC__ )
 #       undef off_t
-#       define off_t __int64
+#       define off_t unsigned __int64
 #   endif
 
 #   ifndef O_NONBLOCK
diff --git a/plugins/win32/about.cpp b/plugins/win32/about.cpp
new file mode 100644 (file)
index 0000000..d815adf
--- /dev/null
@@ -0,0 +1,44 @@
+/*****************************************************************************\r
+ * about.cpp: The "About" dialog box\r
+ *****************************************************************************\r
+ * Copyright (C) 2002 VideoLAN\r
+ *\r
+ * Authors: Olivier Teuliere <ipkiss@via.ecp.fr>\r
+ *\r
+ * This program is free software; you can redistribute it and/or modify\r
+ * it under the terms of the GNU General Public License as published by\r
+ * the Free Software Foundation; either version 2 of the License, or\r
+ * (at your option) any later version.\r
+ *\r
+ * This program is distributed in the hope that it will be useful,\r
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
+ * GNU General Public License for more details.\r
+ *\r
+ * You should have received a copy of the GNU General Public License\r
+ * along with this program; if not, write to the Free Software\r
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111, USA.\r
+ *****************************************************************************/\r
+\r
+#include <vcl.h>\r
+#pragma hdrstop\r
+\r
+#include <videolan/vlc.h>\r
+\r
+#include "interface.h"\r
+\r
+#include "about.h"\r
+#include "win32_common.h"\r
+\r
+//---------------------------------------------------------------------------\r
+//#pragma package(smart_init)\r
+#pragma resource "*.dfm"\r
+\r
+//---------------------------------------------------------------------------\r
+__fastcall TAboutDlg::TAboutDlg( TComponent* Owner )\r
+        : TForm( Owner )\r
+{\r
+}\r
+//---------------------------------------------------------------------------\r
+\r
+\r
diff --git a/plugins/win32/about.dfm b/plugins/win32/about.dfm
new file mode 100644 (file)
index 0000000..b76ed6e
--- /dev/null
@@ -0,0 +1,418 @@
+object AboutDlg: TAboutDlg\r
+  Left = 422\r
+  Top = 159\r
+  BorderStyle = bsDialog\r
+  Caption = 'About'\r
+  ClientHeight = 509\r
+  ClientWidth = 360\r
+  Color = clBtnFace\r
+  Font.Charset = DEFAULT_CHARSET\r
+  Font.Color = clWindowText\r
+  Font.Height = -11\r
+  Font.Name = 'MS Sans Serif'\r
+  Font.Style = []\r
+  Icon.Data = {\r
+    0000010001003030000001001800A81C00001600000028000000300000006000\r
+    00000100180000000000001B0000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000069375900000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000120E0A4011253E0F18000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000F0B\r
+    084143CA08070016430F08040800000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    00000000000000003127291203174647E8464AE808010840E54039E6390B0C06\r
+    0E0A1C0000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0070CD0079DD0079DD0070CD0000000000000000000C1008261D6E4647E54547\r
+    E64748E105040039E6393AE53939E63936D33308030100000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    000000000070CD0079DD0079DE007DE40088F9008CFF008CFF0088F9007CE302\r
+    6EC70B09124641DC4444DF4546E34446E54847E003040040E6403AEA3A3EE33E\r
+    3CE33C39E639080F010801050000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    00000000000000000070CD0079DD0077D90070CB0078D8007BDC007BDC007BDC\r
+    007BDC007BDC007BDD007EE32E232D0804084553F14250F34252ED4449DB4844\r
+    DC4645E208010540E5401C78150D18053CE63C3AE63A39EA393CD83C241A2006\r
+    0402000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000070CD0079DD007ADF007BDE007BDC0072\r
+    CC005188004877004876004876004876034976054A760B4D7731434221175B42\r
+    54EC4253EE4252F60B05104250F44252EB4546DA08010539E6392BAA2B080105\r
+    3CE63C39E7393AE63A39E93939E839081208181C080000000000000000000000\r
+    000000000000000000000000000000000000000070CD0079DD0079DD007CE300\r
+    88F90089F90075D2005188004877005188008CFF008CFF008CFF008CFF008CFF\r
+    1092FF2099FF31A0FF1408294840DB4550E1464EEA0C060B0B05084654F64653\r
+    F64453EF080E033AE63A2BAA2B03030339E33939DF3939E639080F083DDB3D24\r
+    9C24434B3B000000000000000000000000000000000000000000000000000000\r
+    0063B60085F3008BFE0088F9007FE90088F90080E8005CA0008CFF008CFF008C\r
+    FF008CFF008CFF008CFF008CFF048DFF1594FF259BFF35A2FF0C04103F38C754\r
+    5AF7505BF10C08100801084352F64652F44253F30813053AE63A39E639030403\r
+    1C521826A1250812010807032454131558150000000000000000000000000000\r
+    000000000000000000000000000000000000000070CD007CE30079DD00000000\r
+    7CE30089FA008CFF0089FA008CFF008CFF008CFF008CFF008CFF008CFF098FFF\r
+    1996FF2A9DFF3AA4FF0804103A2AA34E58F74E58F40B0B120803054652F34548\r
+    E64451F305130532CA323AE23A03070308070307040008040139E63939E43931\r
+    B42F5E1347000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000061B10000000079DD008CFF008CFF008CFF008CFF008C\r
+    FF008CFF008CFF008CFF008CFF0E91FF1E98FF2E9FFF3FA6FF040408382BAF4D\r
+    5AEF555AF70F12250501050F04160804074250F3121A123AE93A39E239080803\r
+    0D2F08010401268C2539E7393DE63D3FE23E0804100000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    79DD008CFF008CFF008CFF008CFF008CFF008CFF008CFF008CFF028CFF1293FF\r
+    239AFF33A1FF43A8FF0802083A2AA3565BF7555AF71714330501050104000801\r
+    07424FF12828203AEA3A39E639030703182F1008340801040139E7393DE83D39\r
+    E939080400000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000070CD0088F9008CFF008CFF008CFF008C\r
+    FF008CFF008CFF008CFF078EFF1795FF279CFF38A3FF48AAFF0808005151F155\r
+    5AF30804030804000504050800082E358E0E0C1F1D192439E53940E640080400\r
+    2AA12739E63908020708010539E8393BE93B0804080000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000007CE3008CFF008CFF008CFF058EFD1D96F92398F8269AFA31A0FC42A8FF\r
+    4FAEFF5CB3FF65B7FF0C08084F5AF14E57F50B04080804043639A54647E81C13\r
+    49363AA70804080F120835953439E7393EE63E39DF3939EA39081105308A2B3F\r
+    E73F080601000000000000000000000000000000000000000000000000000000\r
+    000000000000000000000000000000000000047BDB1D96F92398F82498F83BA0\r
+    F399C1E1B1C9DDBCD4E7CBE0F3D9EDFFDCEEFFDEEFFFCDE8FF080808575BF750\r
+    58F624125A5057F34845DF4A41E0150E30C55734E3723EC56E33A23D27050105\r
+    39E43939E63939E6393CE63C14420C3BE03B192A090000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000004\r
+    04042D88D399C1E1B1C9DDB1C9DCB7CBDBCFD3D7D5D5D6E2E2E3F0F0F1FEFEFF\r
+    FEFEFFFEFEFFF9FCFF0C08085D61F15B61EF555AF64A4FE13937BB0E0A12DE74\r
+    39E1733CDE713CDF753AE67541C36B342C231F17141B3AE63A39E7393DE83D39\r
+    E93939DE39000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000001818186893B8C3CCD2D5D5D6D5D5D6D5D5\r
+    D6D6D6D6D6D6D6E3E3E3F1F1F1FFFFFFFFFFFFFFFFFFFFFFFF140C145C5EF668\r
+    63F75555EA10061CC3673FDF713A0C1104080403080105080007070407D56F36\r
+    DE743EDE72401C200C29452939E63939E73939EA390000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000343434A2B4C2D5D5D6D6D6D6D6D6D6D6D6D6D5D5D6E2E2E3F0F0F1FEFEFF\r
+    FEFEFFFEFEFFFEFEFF20161C5C5EF6373EAE0E0413E2713DE1763CCD6A3C2A0D\r
+    08A44B2CDE743EBD612F080401030403E1713CDE7239DE713AE1723C22201139\r
+    C13341E641000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000001B1B1B99AEBED5D5D6D5D5D6D5D5\r
+    D6CFD3D7B8CBDBBFD5E7CEE2F3DCEFFFDFF0FFE2F1FFE9F4FF10100C3639A46E\r
+    4540DE7239DE713DE1713C07000784261CDE7639E3743E0812001F0407D86E36\r
+    E3753EE57540E57541DE763CDE733DD26637493C387E2F7B0000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    00001B1B1B99AEBFCED3D7B7CBDBB1C9DD99C1E140A2F339A2FA49AAFC59B2FF\r
+    66B8FF74BEFF92CBFFD9ECFF0F0402C66531DE7139E2733D854B1E0A01084D11\r
+    0DE3733EE1723CDF713ADF753AE1763C1D0A08290708E57140E1763CDE733DC7\r
+    6B34080408000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000001818187FA5C399C1E13BA0F32498\r
+    F81D96F91091FD1C97FF2C9EFF3CA5FF4DACFF5DB3FF71BBFF8DC8FF9FD0FF08\r
+    0400080406B95C2EDE7239070B070803014D1615DE723CDE7540E5714030090D\r
+    0504003A120FE67541DE75390808044A0C290000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    00000707071778C81C92F3058EFD008CFF008CFF1092FF2099FF31A0FF41A7FF\r
+    51AEFF62B5FF72BCFF7BBFFF7BBBF96E9FCD0808080806041D0508E571403E22\r
+    0C200708080405070407070007080303B05F31DE723967301908010500000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    000000000000000000000000000000000000000000000000007CE3008CFF008C\r
+    FF048DFF1594FF259BFF35A2FF46A9FF56B0FF66B7FF77BEFF7BBFFF6DAAE300\r
+    0000000000000000000000080401200C088D4024E17141E57140DF713ADE713E\r
+    DE76390801070000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    00000000000000000079DD008CFF008CFF098FFF1996FF2A9DFF3AA4FF4AABFF\r
+    5BB2FF6BB9FF7BBFFF7BBFFF6AA5DD0000000000000000000000000000001D1A\r
+    0C1A0F08110903441912E57140623B1E08020300000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000079DD008CFF008C\r
+    FF0E91FF1E98FF2E9FFF3FA6FF4FADFF5FB4FF70BBFF7BBFFF78BAF96299CD00\r
+    00000000000000000000000000000000000000003914100000005A2411000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    00000000000000000070CD0088F9078EFD2C9CF940A3F850ACFA60B4FC70BCFF\r
+    7DC2FF87C6FF7EC0FF6DAAE30000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000707071A85DD40A2\r
+    F3A0C3E1B7CBDDC6D8E7D4E5F3E2F1FFE5F2FFD9ECFF9FD0FF7AACDD05050500\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    00000000000000001818187FA5C3B8CBDBD0D4D7D5D5D6E2E2E3F0F0F1FEFEFF\r
+    FEFEFFFAFCFFE2EDF99FB7CD1C1C1C0000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000001B1B1B99AEBFD4D5\r
+    D6D6D6D6D6D6D6E3E3E3F1F1F1FFFFFFFFFFFFFEFEFFD1DAE33E3E3E00000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    00000000000000001D1D1D7B9BB4CACED1D6D6D6D5D5D6E2E2E3F0F0F1FEFEFF\r
+    FEFEFFFEFEFFC9D2DD2121210000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    000000000000000000000000000000000000000000000000000000343434A5B5\r
+    C2CFD3D7BFCEDBC9D9E7D7E6F3E6F3FFECF5FFF0F4F9AEBDCD23232300000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    000000000000000000000018181887A8C3A6C6E169B3F367B6FA77BEFC88C6FF\r
+    9FD0FFB4CBE33939390000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    000000000000000000000000000000000000000000000000000000040404338C\r
+    D749A8F947A9FD54AFFF64B6FF74BDFF7EC0FF76ABDD05050500000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    00000000000000000000000000001F7DCD369FF948AAFF58B1FF69B8FF79BFFF\r
+    78BAF96299CD0000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    003592E34DACFF5DB3FF6DBAFF7BBFFF6DAAE300000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    00000000000000000000000000000000003890DD51AEFF62B5FF72BCFF7BBFFF\r
+    6AA5DD0000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    003B8FD84C9CE3589FDE69A9E375B6F46299CD00000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    00000000000000000000000000000000003376B00000000000000000005788B6\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    00000000006CC61A83DD247FCC00000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000006DC71A83DD2686D71F6EB1\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    000000000000000000000000000000000000000000000000000000000000FFFF\r
+    FFFFFFFF0000FFFFFFFFFFFF0000FFFFFE1FDFFF0000FFFFE0078FFF0000FFFE\r
+    000007FF0000FFF0000001FF0000FF80000000FF0000FF000000003F0000FF00\r
+    0000000F0000FE00000000070000F800000000070000F8000000000F0000FC00\r
+    000000070000FE00000000070000FF80000000070000FFC0000000070000FFE0\r
+    000000070000FFE0000000070000FFE0000000070000FFE0000000070000FFF0\r
+    000000070000FFF0000000030000FFF0000000070000FFF00000000F0000FFF0\r
+    0000003F0000FFF8000E00FF0000FFF8000F01FF0000FFF8000FD7FF0000FFF8\r
+    001FFFFF0000FFFC001FFFFF0000FFFC001FFFFF0000FFFC003FFFFF0000FFFC\r
+    003FFFFF0000FFFE003FFFFF0000FFFE007FFFFF0000FFFE007FFFFF0000FFFE\r
+    007FFFFF0000FFFF00FFFFFF0000FFFF00FFFFFF0000FFFF00FFFFFF0000FFFF\r
+    01FFFFFF0000FFFF01FFFFFF0000FFFF81FFFFFF0000FFFFC3FFFFFF0000FFFF\r
+    FFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000}\r
+  OldCreateOrder = False\r
+  PixelsPerInch = 96\r
+  TextHeight = 13\r
+  object Label1: TLabel\r
+    Left = 141\r
+    Top = 8\r
+    Width = 77\r
+    Height = 13\r
+    Caption = 'VideoLAN Client'\r
+  end\r
+  object Label2: TLabel\r
+    Left = 5\r
+    Top = 40\r
+    Width = 346\r
+    Height = 13\r
+    Caption = \r
+      '(C) Copyright 1996, 1997, 1998, 1999, 2000, 2001 - The VideoLAN ' +\r
+      'Team'\r
+  end\r
+  object Label21: TLabel\r
+    Left = 52\r
+    Top = 424\r
+    Width = 255\r
+    Height = 39\r
+    Caption = \r
+      'This is the VideoLAN Client, a DVD and MPEG player. It can play ' +\r
+      'MPEG and MPEG 2 files from a file or from a network source.'\r
+    WordWrap = True\r
+  end\r
+  object GroupBoxAuthors: TGroupBox\r
+    Left = 6\r
+    Top = 64\r
+    Width = 345\r
+    Height = 353\r
+    Caption = 'Authors'\r
+    TabOrder = 0\r
+    object Label3: TLabel\r
+      Left = 24\r
+      Top = 14\r
+      Width = 171\r
+      Height = 13\r
+      Caption = 'Régis Duchesne <regis@via.ecp.fr>'\r
+    end\r
+    object Label4: TLabel\r
+      Left = 24\r
+      Top = 32\r
+      Width = 181\r
+      Height = 13\r
+      Caption = 'Michel Lespinasse <walken@zoy.org>'\r
+    end\r
+    object Label5: TLabel\r
+      Left = 24\r
+      Top = 51\r
+      Width = 159\r
+      Height = 13\r
+      Caption = 'Olivier Pomel <pomel@via.ecp.fr>'\r
+    end\r
+    object Label6: TLabel\r
+      Left = 24\r
+      Top = 69\r
+      Width = 133\r
+      Height = 13\r
+      Caption = 'Pierre Baillet <oct@zoy.org>'\r
+    end\r
+    object Label7: TLabel\r
+      Left = 24\r
+      Top = 87\r
+      Width = 207\r
+      Height = 13\r
+      Caption = 'Jean-Philippe Grimaldi <jeanphi@via.ecp.fr>'\r
+    end\r
+    object Label8: TLabel\r
+      Left = 24\r
+      Top = 106\r
+      Width = 149\r
+      Height = 13\r
+      Caption = 'Andres Krapf <dae@via.ecp.fr>'\r
+    end\r
+    object Label9: TLabel\r
+      Left = 24\r
+      Top = 124\r
+      Width = 194\r
+      Height = 13\r
+      Caption = 'Christophe Massiot <massiot@via.ecp.fr>'\r
+    end\r
+    object Label10: TLabel\r
+      Left = 24\r
+      Top = 142\r
+      Width = 173\r
+      Height = 13\r
+      Caption = 'Vincent Seguin <seguin@via.ecp.fr>'\r
+    end\r
+    object Label11: TLabel\r
+      Left = 24\r
+      Top = 161\r
+      Width = 165\r
+      Height = 13\r
+      Caption = 'Benoit Steiner <benny@via.ecp.fr>'\r
+    end\r
+    object Label12: TLabel\r
+      Left = 24\r
+      Top = 179\r
+      Width = 241\r
+      Height = 13\r
+      Caption = 'Arnaud de Bossoreille de Ribou <bozo@via.ecp.fr>'\r
+    end\r
+    object Label13: TLabel\r
+      Left = 24\r
+      Top = 198\r
+      Width = 186\r
+      Height = 13\r
+      Caption = 'Jean-Marc Dressler <polux@via.ecp.fr>'\r
+    end\r
+    object Label14: TLabel\r
+      Left = 24\r
+      Top = 216\r
+      Width = 171\r
+      Height = 13\r
+      Caption = 'Gaël Hendryckx <jimmy@via.ecp.fr>'\r
+    end\r
+    object Label15: TLabel\r
+      Left = 24\r
+      Top = 234\r
+      Width = 158\r
+      Height = 13\r
+      Caption = 'Samuel Hocevar <sam@zoy.org>'\r
+    end\r
+    object Label16: TLabel\r
+      Left = 24\r
+      Top = 253\r
+      Width = 178\r
+      Height = 13\r
+      Caption = 'Brieuc Jeunhomme <bbp@via.ecp.fr>'\r
+    end\r
+    object Label17: TLabel\r
+      Left = 24\r
+      Top = 271\r
+      Width = 164\r
+      Height = 13\r
+      Caption = 'Michel Kaempf <maxx@via.ecp.fr>'\r
+    end\r
+    object Label18: TLabel\r
+      Left = 24\r
+      Top = 289\r
+      Width = 160\r
+      Height = 13\r
+      Caption = 'Stéphane Borel <stef@via.ecp.fr>'\r
+    end\r
+    object Label19: TLabel\r
+      Left = 24\r
+      Top = 308\r
+      Width = 163\r
+      Height = 13\r
+      Caption = 'Renaud Dartus <reno@via.ecp.fr>'\r
+    end\r
+    object Label20: TLabel\r
+      Left = 24\r
+      Top = 326\r
+      Width = 149\r
+      Height = 13\r
+      Caption = 'Henri Fallon <henri@via.ecp.fr>'\r
+    end\r
+  end\r
+  object BitBtnOk: TBitBtn\r
+    Left = 7\r
+    Top = 471\r
+    Width = 345\r
+    Height = 25\r
+    Caption = 'OK'\r
+    Default = True\r
+    ModalResult = 1\r
+    TabOrder = 1\r
+  end\r
+end\r
diff --git a/plugins/win32/about.h b/plugins/win32/about.h
new file mode 100644 (file)
index 0000000..f4141c5
--- /dev/null
@@ -0,0 +1,63 @@
+/*****************************************************************************\r
+ * about.h: The "About" dialog box\r
+ *****************************************************************************\r
+ * Copyright (C) 2002 VideoLAN\r
+ *\r
+ * Authors: Olivier Teuliere <ipkiss@via.ecp.fr>\r
+ *\r
+ * This program is free software; you can redistribute it and/or modify\r
+ * it under the terms of the GNU General Public License as published by\r
+ * the Free Software Foundation; either version 2 of the License, or\r
+ * (at your option) any later version.\r
+ *\r
+ * This program is distributed in the hope that it will be useful,\r
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
+ * GNU General Public License for more details.\r
+ *\r
+ * You should have received a copy of the GNU General Public License\r
+ * along with this program; if not, write to the Free Software\r
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111, USA.\r
+ *****************************************************************************/\r
+\r
+#ifndef aboutH\r
+#define aboutH\r
+//---------------------------------------------------------------------------\r
+#include <Classes.hpp>\r
+#include <Controls.hpp>\r
+#include <StdCtrls.hpp>\r
+#include <Forms.hpp>\r
+#include <Buttons.hpp>\r
+//---------------------------------------------------------------------------\r
+class TAboutDlg : public TForm\r
+{\r
+__published:   // IDE-managed Components\r
+    TLabel *Label1;\r
+    TLabel *Label2;\r
+    TLabel *Label21;\r
+    TGroupBox *GroupBoxAuthors;\r
+    TLabel *Label3;\r
+    TLabel *Label4;\r
+    TLabel *Label5;\r
+    TLabel *Label6;\r
+    TLabel *Label7;\r
+    TLabel *Label8;\r
+    TLabel *Label9;\r
+    TLabel *Label10;\r
+    TLabel *Label11;\r
+    TLabel *Label12;\r
+    TLabel *Label13;\r
+    TLabel *Label14;\r
+    TLabel *Label15;\r
+    TLabel *Label16;\r
+    TLabel *Label17;\r
+    TLabel *Label18;\r
+    TLabel *Label19;\r
+    TLabel *Label20;\r
+    TBitBtn *BitBtnOk;\r
+private:       // User declarations\r
+public:                // User declarations\r
+    __fastcall TAboutDlg( TComponent* Owner );\r
+};\r
+//---------------------------------------------------------------------------\r
+#endif\r
diff --git a/plugins/win32/control.cpp b/plugins/win32/control.cpp
new file mode 100644 (file)
index 0000000..1a0ff33
--- /dev/null
@@ -0,0 +1,150 @@
+/*****************************************************************************\r
+ * control.cpp: functions to handle stream control buttons.\r
+ *****************************************************************************\r
+ * Copyright (C) 2002 VideoLAN\r
+ *\r
+ * Authors: Olivier Teuliere <ipkiss@via.ecp.fr>\r
+ *\r
+ * This program is free software; you can redistribute it and/or modify\r
+ * it under the terms of the GNU General Public License as published by\r
+ * the Free Software Foundation; either version 2 of the License, or\r
+ * (at your option) any later version.\r
+ *\r
+ * This program is distributed in the hope that it will be useful,\r
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
+ * GNU General Public License for more details.\r
+ *\r
+ * You should have received a copy of the GNU General Public License\r
+ * along with this program; if not, write to the Free Software\r
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111, USA.\r
+ *****************************************************************************/\r
+\r
+#include <vcl.h>\r
+\r
+#include <videolan/vlc.h>\r
+\r
+#include "stream_control.h"\r
+#include "input_ext-intf.h"\r
+\r
+#include "interface.h"\r
+#include "intf_playlist.h"\r
+\r
+#include "win32_common.h"\r
+\r
+extern  struct intf_thread_s *p_intfGlobal;\r
+\r
+/****************************************************************************\r
+ * Control functions: this is where the functions are defined\r
+ ****************************************************************************\r
+ * These functions are used by toolbuttons callbacks\r
+ ****************************************************************************/\r
+bool ControlBack( TObject *Sender )\r
+{\r
+    /* FIXME: TODO */\r
+    \r
+    return false;\r
+}\r
+\r
+\r
+bool ControlStop( TObject *Sender )\r
+{\r
+    if( p_input_bank->pp_input[0] != NULL )\r
+    {\r
+        /* end playing item */\r
+        p_input_bank->pp_input[0]->b_eof = 1;\r
+\r
+        /* update playlist */\r
+        vlc_mutex_lock( &p_main->p_playlist->change_lock );\r
+\r
+        p_main->p_playlist->i_index--;\r
+        p_main->p_playlist->b_stopped = 1;\r
+\r
+        vlc_mutex_unlock( &p_main->p_playlist->change_lock );\r
+\r
+    }\r
+\r
+    return true;\r
+}\r
+\r
+\r
+bool ControlPlay( TObject *Sender )\r
+{\r
+    if( p_input_bank->pp_input[0] != NULL )\r
+    {\r
+        input_SetStatus( p_input_bank->pp_input[0], INPUT_STATUS_PLAY );\r
+        p_main->p_playlist->b_stopped = 0;\r
+    }\r
+    else\r
+    {\r
+        vlc_mutex_lock( &p_main->p_playlist->change_lock );\r
+\r
+        if( p_main->p_playlist->b_stopped )\r
+        {\r
+            if( p_main->p_playlist->i_size )\r
+            {\r
+                vlc_mutex_unlock( &p_main->p_playlist->change_lock );\r
+                intf_PlaylistJumpto( p_main->p_playlist,\r
+                                     p_main->p_playlist->i_index );\r
+            }\r
+            else\r
+            {\r
+                vlc_mutex_unlock( &p_main->p_playlist->change_lock );\r
+                p_intfGlobal->p_sys->p_window->MenuOpenFileClick( Sender );\r
+            }\r
+        }\r
+        else\r
+        {\r
+            vlc_mutex_unlock( &p_main->p_playlist->change_lock );\r
+        }\r
+\r
+    }\r
+\r
+    return true;\r
+}\r
+\r
+\r
+bool ControlPause( TObject *Sender )\r
+{\r
+    if( p_input_bank->pp_input[0] != NULL )\r
+    {\r
+        input_SetStatus( p_input_bank->pp_input[0], INPUT_STATUS_PAUSE );\r
+\r
+        vlc_mutex_lock( &p_main->p_playlist->change_lock );\r
+        p_main->p_playlist->b_stopped = 0;\r
+        vlc_mutex_unlock( &p_main->p_playlist->change_lock );\r
+    }\r
+\r
+    return true;\r
+}\r
+\r
+\r
+bool ControlSlow( TObject *Sender )\r
+{\r
+    if( p_input_bank->pp_input[0] != NULL )\r
+    {\r
+        input_SetStatus( p_input_bank->pp_input[0], INPUT_STATUS_SLOWER );\r
+\r
+        vlc_mutex_lock( &p_main->p_playlist->change_lock );\r
+        p_main->p_playlist->b_stopped = 0;\r
+        vlc_mutex_unlock( &p_main->p_playlist->change_lock );\r
+    }\r
+\r
+    return true;\r
+}\r
+\r
+\r
+bool ControlFast( TObject *Sender )\r
+{\r
+    if( p_input_bank->pp_input[0] != NULL )\r
+    {\r
+        input_SetStatus( p_input_bank->pp_input[0], INPUT_STATUS_FASTER );\r
+\r
+        vlc_mutex_lock( &p_main->p_playlist->change_lock );\r
+        p_main->p_playlist->b_stopped = 0;\r
+        vlc_mutex_unlock( &p_main->p_playlist->change_lock );\r
+    }\r
+\r
+    return true;\r
+}\r
+\r
diff --git a/plugins/win32/control.h b/plugins/win32/control.h
new file mode 100644 (file)
index 0000000..0ee1ebd
--- /dev/null
@@ -0,0 +1,29 @@
+/*****************************************************************************\r
+ * control.h: prototypes for control functions.\r
+ *****************************************************************************\r
+ * Copyright (C) 2002 VideoLAN\r
+ *\r
+ * Authors: Olivier Teuliere <ipkiss@via.ecp.fr>\r
+ *\r
+ * This program is free software; you can redistribute it and/or modify\r
+ * it under the terms of the GNU General Public License as published by\r
+ * the Free Software Foundation; either version 2 of the License, or\r
+ * (at your option) any later version.\r
+ *\r
+ * This program is distributed in the hope that it will be useful,\r
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
+ * GNU General Public License for more details.\r
+ *\r
+ * You should have received a copy of the GNU General Public License\r
+ * along with this program; if not, write to the Free Software\r
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111, USA.\r
+ *****************************************************************************/\r
+\r
+bool ControlBack ( TObject *Sender );\r
+bool ControlStop ( TObject *Sender );\r
+bool ControlPlay ( TObject *Sender );\r
+bool ControlPause( TObject *Sender );\r
+bool ControlSlow ( TObject *Sender );\r
+bool ControlFast ( TObject *Sender );\r
+\r
diff --git a/plugins/win32/disc.cpp b/plugins/win32/disc.cpp
new file mode 100644 (file)
index 0000000..642372b
--- /dev/null
@@ -0,0 +1,119 @@
+/*****************************************************************************\r
+ * disc.cpp: "Open disc" dialog box.\r
+ *****************************************************************************\r
+ * Copyright (C) 2002 VideoLAN\r
+ *\r
+ * Authors: Olivier Teuliere <ipkiss@via.ecp.fr>\r
+ *\r
+ * This program is free software; you can redistribute it and/or modify\r
+ * it under the terms of the GNU General Public License as published by\r
+ * the Free Software Foundation; either version 2 of the License, or\r
+ * (at your option) any later version.\r
+ * \r
+ * This program is distributed in the hope that it will be useful,\r
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
+ * GNU General Public License for more details.\r
+ *\r
+ * You should have received a copy of the GNU General Public License\r
+ * along with this program; if not, write to the Free Software\r
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111, USA.\r
+ *****************************************************************************/\r
+\r
+#include <vcl.h>\r
+#pragma hdrstop\r
+\r
+#include <videolan/vlc.h>\r
+\r
+#include "stream_control.h"\r
+#include "input_ext-intf.h"\r
+\r
+#include "interface.h"\r
+#include "intf_playlist.h"\r
+\r
+#include "win32_common.h"\r
+\r
+#include "disc.h"\r
+//---------------------------------------------------------------------------\r
+//#pragma package(smart_init)\r
+#pragma resource "*.dfm"\r
+\r
+extern  struct intf_thread_s *p_intfGlobal;\r
+\r
+//---------------------------------------------------------------------------\r
+__fastcall TDiscDlg::TDiscDlg( TComponent* Owner )\r
+        : TForm( Owner )\r
+{\r
+    char *psz_dvd_device = config_GetPszVariable( "dvd_device" );\r
+    char *psz_vcd_device = config_GetPszVariable( "vcd_device" );\r
+\r
+    if( psz_dvd_device )\r
+    {\r
+        EditDevice->Text.sprintf( "%s", psz_dvd_device );\r
+        free( psz_dvd_device );\r
+    }\r
+\r
+    if( psz_vcd_device )\r
+    {\r
+        EditDevice->Text.sprintf( "%s", psz_vcd_device );\r
+        free( psz_vcd_device );\r
+    }\r
+}\r
+//---------------------------------------------------------------------------\r
+void __fastcall TDiscDlg::FormShow( TObject *Sender )\r
+{\r
+    p_intfGlobal->p_sys->p_window->MenuOpenDisc->Checked = true;\r
+    p_intfGlobal->p_sys->p_window->PopupOpenDisc->Checked = true;\r
+}\r
+//---------------------------------------------------------------------------\r
+void __fastcall TDiscDlg::FormHide( TObject *Sender )\r
+{\r
+    p_intfGlobal->p_sys->p_window->MenuOpenDisc->Checked = false;\r
+    p_intfGlobal->p_sys->p_window->PopupOpenDisc->Checked = false;\r
+}\r
+//---------------------------------------------------------------------------\r
+void __fastcall TDiscDlg::BitBtnCancelClick( TObject *Sender )\r
+{\r
+    Hide();\r
+}\r
+//---------------------------------------------------------------------------\r
+void __fastcall TDiscDlg::BitBtnOkClick( TObject *Sender )\r
+{\r
+    AnsiString  Device, Source, Method, Title, Chapter;\r
+    int         i_end = p_main->p_playlist->i_size;\r
+\r
+    Hide();\r
+\r
+    Device = EditDevice->Text;\r
+\r
+    /* Check which method was activated */\r
+    if( RadioGroupType->ItemIndex == 0 )\r
+    {\r
+        Method = "dvd";\r
+    }\r
+    else\r
+    {\r
+        Method = "vcd";\r
+    }\r
+    \r
+    /* Select title and chapter */\r
+    Title.sprintf( "%d", UpDownTitle->Position );\r
+    Chapter.sprintf( "%d", UpDownChapter->Position );\r
+\r
+    /* Build source name and add it to playlist */\r
+    Source = Method + ":" + Device + "@" + Title + "," + Chapter;\r
+    intf_PlaylistAdd( p_main->p_playlist, PLAYLIST_END, Source.c_str() );\r
+\r
+    /* update the display */\r
+    p_intfGlobal->p_sys->p_playlist->UpdateGrid( p_main->p_playlist );\r
+\r
+    /* stop current item, select added item */\r
+    if( p_input_bank->pp_input[0] != NULL )\r
+    {\r
+        p_input_bank->pp_input[0]->b_eof = 1;\r
+    }\r
+\r
+    intf_PlaylistJumpto( p_main->p_playlist, i_end - 1 );\r
+}\r
+//---------------------------------------------------------------------------\r
+\r
diff --git a/plugins/win32/disc.dfm b/plugins/win32/disc.dfm
new file mode 100644 (file)
index 0000000..e579aa1
--- /dev/null
@@ -0,0 +1,362 @@
+object DiscDlg: TDiscDlg\r
+  Left = 503\r
+  Top = 366\r
+  BorderStyle = bsDialog\r
+  Caption = 'Open disc'\r
+  ClientHeight = 170\r
+  ClientWidth = 258\r
+  Color = clBtnFace\r
+  Font.Charset = DEFAULT_CHARSET\r
+  Font.Color = clWindowText\r
+  Font.Height = -11\r
+  Font.Name = 'MS Sans Serif'\r
+  Font.Style = []\r
+  Icon.Data = {\r
+    0000010001003030000001001800A81C00001600000028000000300000006000\r
+    00000100180000000000001B0000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000069375900000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000120E0A4011253E0F18000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000F0B\r
+    084143CA08070016430F08040800000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    00000000000000003127291203174647E8464AE808010840E54039E6390B0C06\r
+    0E0A1C0000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0070CD0079DD0079DD0070CD0000000000000000000C1008261D6E4647E54547\r
+    E64748E105040039E6393AE53939E63936D33308030100000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    000000000070CD0079DD0079DE007DE40088F9008CFF008CFF0088F9007CE302\r
+    6EC70B09124641DC4444DF4546E34446E54847E003040040E6403AEA3A3EE33E\r
+    3CE33C39E639080F010801050000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    00000000000000000070CD0079DD0077D90070CB0078D8007BDC007BDC007BDC\r
+    007BDC007BDC007BDD007EE32E232D0804084553F14250F34252ED4449DB4844\r
+    DC4645E208010540E5401C78150D18053CE63C3AE63A39EA393CD83C241A2006\r
+    0402000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000070CD0079DD007ADF007BDE007BDC0072\r
+    CC005188004877004876004876004876034976054A760B4D7731434221175B42\r
+    54EC4253EE4252F60B05104250F44252EB4546DA08010539E6392BAA2B080105\r
+    3CE63C39E7393AE63A39E93939E839081208181C080000000000000000000000\r
+    000000000000000000000000000000000000000070CD0079DD0079DD007CE300\r
+    88F90089F90075D2005188004877005188008CFF008CFF008CFF008CFF008CFF\r
+    1092FF2099FF31A0FF1408294840DB4550E1464EEA0C060B0B05084654F64653\r
+    F64453EF080E033AE63A2BAA2B03030339E33939DF3939E639080F083DDB3D24\r
+    9C24434B3B000000000000000000000000000000000000000000000000000000\r
+    0063B60085F3008BFE0088F9007FE90088F90080E8005CA0008CFF008CFF008C\r
+    FF008CFF008CFF008CFF008CFF048DFF1594FF259BFF35A2FF0C04103F38C754\r
+    5AF7505BF10C08100801084352F64652F44253F30813053AE63A39E639030403\r
+    1C521826A1250812010807032454131558150000000000000000000000000000\r
+    000000000000000000000000000000000000000070CD007CE30079DD00000000\r
+    7CE30089FA008CFF0089FA008CFF008CFF008CFF008CFF008CFF008CFF098FFF\r
+    1996FF2A9DFF3AA4FF0804103A2AA34E58F74E58F40B0B120803054652F34548\r
+    E64451F305130532CA323AE23A03070308070307040008040139E63939E43931\r
+    B42F5E1347000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000061B10000000079DD008CFF008CFF008CFF008CFF008C\r
+    FF008CFF008CFF008CFF008CFF0E91FF1E98FF2E9FFF3FA6FF040408382BAF4D\r
+    5AEF555AF70F12250501050F04160804074250F3121A123AE93A39E239080803\r
+    0D2F08010401268C2539E7393DE63D3FE23E0804100000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    79DD008CFF008CFF008CFF008CFF008CFF008CFF008CFF008CFF028CFF1293FF\r
+    239AFF33A1FF43A8FF0802083A2AA3565BF7555AF71714330501050104000801\r
+    07424FF12828203AEA3A39E639030703182F1008340801040139E7393DE83D39\r
+    E939080400000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000070CD0088F9008CFF008CFF008CFF008C\r
+    FF008CFF008CFF008CFF078EFF1795FF279CFF38A3FF48AAFF0808005151F155\r
+    5AF30804030804000504050800082E358E0E0C1F1D192439E53940E640080400\r
+    2AA12739E63908020708010539E8393BE93B0804080000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000007CE3008CFF008CFF008CFF058EFD1D96F92398F8269AFA31A0FC42A8FF\r
+    4FAEFF5CB3FF65B7FF0C08084F5AF14E57F50B04080804043639A54647E81C13\r
+    49363AA70804080F120835953439E7393EE63E39DF3939EA39081105308A2B3F\r
+    E73F080601000000000000000000000000000000000000000000000000000000\r
+    000000000000000000000000000000000000047BDB1D96F92398F82498F83BA0\r
+    F399C1E1B1C9DDBCD4E7CBE0F3D9EDFFDCEEFFDEEFFFCDE8FF080808575BF750\r
+    58F624125A5057F34845DF4A41E0150E30C55734E3723EC56E33A23D27050105\r
+    39E43939E63939E6393CE63C14420C3BE03B192A090000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000004\r
+    04042D88D399C1E1B1C9DDB1C9DCB7CBDBCFD3D7D5D5D6E2E2E3F0F0F1FEFEFF\r
+    FEFEFFFEFEFFF9FCFF0C08085D61F15B61EF555AF64A4FE13937BB0E0A12DE74\r
+    39E1733CDE713CDF753AE67541C36B342C231F17141B3AE63A39E7393DE83D39\r
+    E93939DE39000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000001818186893B8C3CCD2D5D5D6D5D5D6D5D5\r
+    D6D6D6D6D6D6D6E3E3E3F1F1F1FFFFFFFFFFFFFFFFFFFFFFFF140C145C5EF668\r
+    63F75555EA10061CC3673FDF713A0C1104080403080105080007070407D56F36\r
+    DE743EDE72401C200C29452939E63939E73939EA390000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000343434A2B4C2D5D5D6D6D6D6D6D6D6D6D6D6D5D5D6E2E2E3F0F0F1FEFEFF\r
+    FEFEFFFEFEFFFEFEFF20161C5C5EF6373EAE0E0413E2713DE1763CCD6A3C2A0D\r
+    08A44B2CDE743EBD612F080401030403E1713CDE7239DE713AE1723C22201139\r
+    C13341E641000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000001B1B1B99AEBED5D5D6D5D5D6D5D5\r
+    D6CFD3D7B8CBDBBFD5E7CEE2F3DCEFFFDFF0FFE2F1FFE9F4FF10100C3639A46E\r
+    4540DE7239DE713DE1713C07000784261CDE7639E3743E0812001F0407D86E36\r
+    E3753EE57540E57541DE763CDE733DD26637493C387E2F7B0000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    00001B1B1B99AEBFCED3D7B7CBDBB1C9DD99C1E140A2F339A2FA49AAFC59B2FF\r
+    66B8FF74BEFF92CBFFD9ECFF0F0402C66531DE7139E2733D854B1E0A01084D11\r
+    0DE3733EE1723CDF713ADF753AE1763C1D0A08290708E57140E1763CDE733DC7\r
+    6B34080408000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000001818187FA5C399C1E13BA0F32498\r
+    F81D96F91091FD1C97FF2C9EFF3CA5FF4DACFF5DB3FF71BBFF8DC8FF9FD0FF08\r
+    0400080406B95C2EDE7239070B070803014D1615DE723CDE7540E5714030090D\r
+    0504003A120FE67541DE75390808044A0C290000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    00000707071778C81C92F3058EFD008CFF008CFF1092FF2099FF31A0FF41A7FF\r
+    51AEFF62B5FF72BCFF7BBFFF7BBBF96E9FCD0808080806041D0508E571403E22\r
+    0C200708080405070407070007080303B05F31DE723967301908010500000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    000000000000000000000000000000000000000000000000007CE3008CFF008C\r
+    FF048DFF1594FF259BFF35A2FF46A9FF56B0FF66B7FF77BEFF7BBFFF6DAAE300\r
+    0000000000000000000000080401200C088D4024E17141E57140DF713ADE713E\r
+    DE76390801070000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    00000000000000000079DD008CFF008CFF098FFF1996FF2A9DFF3AA4FF4AABFF\r
+    5BB2FF6BB9FF7BBFFF7BBFFF6AA5DD0000000000000000000000000000001D1A\r
+    0C1A0F08110903441912E57140623B1E08020300000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000079DD008CFF008C\r
+    FF0E91FF1E98FF2E9FFF3FA6FF4FADFF5FB4FF70BBFF7BBFFF78BAF96299CD00\r
+    00000000000000000000000000000000000000003914100000005A2411000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    00000000000000000070CD0088F9078EFD2C9CF940A3F850ACFA60B4FC70BCFF\r
+    7DC2FF87C6FF7EC0FF6DAAE30000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000707071A85DD40A2\r
+    F3A0C3E1B7CBDDC6D8E7D4E5F3E2F1FFE5F2FFD9ECFF9FD0FF7AACDD05050500\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    00000000000000001818187FA5C3B8CBDBD0D4D7D5D5D6E2E2E3F0F0F1FEFEFF\r
+    FEFEFFFAFCFFE2EDF99FB7CD1C1C1C0000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000001B1B1B99AEBFD4D5\r
+    D6D6D6D6D6D6D6E3E3E3F1F1F1FFFFFFFFFFFFFEFEFFD1DAE33E3E3E00000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    00000000000000001D1D1D7B9BB4CACED1D6D6D6D5D5D6E2E2E3F0F0F1FEFEFF\r
+    FEFEFFFEFEFFC9D2DD2121210000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    000000000000000000000000000000000000000000000000000000343434A5B5\r
+    C2CFD3D7BFCEDBC9D9E7D7E6F3E6F3FFECF5FFF0F4F9AEBDCD23232300000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    000000000000000000000018181887A8C3A6C6E169B3F367B6FA77BEFC88C6FF\r
+    9FD0FFB4CBE33939390000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    000000000000000000000000000000000000000000000000000000040404338C\r
+    D749A8F947A9FD54AFFF64B6FF74BDFF7EC0FF76ABDD05050500000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    00000000000000000000000000001F7DCD369FF948AAFF58B1FF69B8FF79BFFF\r
+    78BAF96299CD0000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    003592E34DACFF5DB3FF6DBAFF7BBFFF6DAAE300000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    00000000000000000000000000000000003890DD51AEFF62B5FF72BCFF7BBFFF\r
+    6AA5DD0000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    003B8FD84C9CE3589FDE69A9E375B6F46299CD00000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    00000000000000000000000000000000003376B00000000000000000005788B6\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    00000000006CC61A83DD247FCC00000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000006DC71A83DD2686D71F6EB1\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    000000000000000000000000000000000000000000000000000000000000FFFF\r
+    FFFFFFFF0000FFFFFFFFFFFF0000FFFFFE1FDFFF0000FFFFE0078FFF0000FFFE\r
+    000007FF0000FFF0000001FF0000FF80000000FF0000FF000000003F0000FF00\r
+    0000000F0000FE00000000070000F800000000070000F8000000000F0000FC00\r
+    000000070000FE00000000070000FF80000000070000FFC0000000070000FFE0\r
+    000000070000FFE0000000070000FFE0000000070000FFE0000000070000FFF0\r
+    000000070000FFF0000000030000FFF0000000070000FFF00000000F0000FFF0\r
+    0000003F0000FFF8000E00FF0000FFF8000F01FF0000FFF8000FD7FF0000FFF8\r
+    001FFFFF0000FFFC001FFFFF0000FFFC001FFFFF0000FFFC003FFFFF0000FFFC\r
+    003FFFFF0000FFFE003FFFFF0000FFFE007FFFFF0000FFFE007FFFFF0000FFFE\r
+    007FFFFF0000FFFF00FFFFFF0000FFFF00FFFFFF0000FFFF00FFFFFF0000FFFF\r
+    01FFFFFF0000FFFF01FFFFFF0000FFFF81FFFFFF0000FFFFC3FFFFFF0000FFFF\r
+    FFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000}\r
+  OldCreateOrder = False\r
+  OnHide = FormHide\r
+  OnShow = FormShow\r
+  PixelsPerInch = 96\r
+  TextHeight = 13\r
+  object LabelDevice: TLabel\r
+    Left = 8\r
+    Top = 105\r
+    Width = 63\r
+    Height = 13\r
+    Caption = 'Device name'\r
+  end\r
+  object GroupBoxPosition: TGroupBox\r
+    Left = 96\r
+    Top = 8\r
+    Width = 153\r
+    Height = 81\r
+    Caption = 'Starting position'\r
+    TabOrder = 1\r
+    object LabelTitle: TLabel\r
+      Left = 16\r
+      Top = 24\r
+      Width = 20\r
+      Height = 13\r
+      Caption = 'Title'\r
+    end\r
+    object LabelChapter: TLabel\r
+      Left = 16\r
+      Top = 52\r
+      Width = 37\r
+      Height = 13\r
+      Caption = 'Chapter'\r
+    end\r
+    object EditTitle: TEdit\r
+      Left = 64\r
+      Top = 20\r
+      Width = 57\r
+      Height = 21\r
+      TabOrder = 0\r
+      Text = '1'\r
+    end\r
+    object EditChapter: TEdit\r
+      Left = 64\r
+      Top = 48\r
+      Width = 57\r
+      Height = 21\r
+      TabOrder = 1\r
+      Text = '1'\r
+    end\r
+    object UpDownTitle: TUpDown\r
+      Left = 121\r
+      Top = 20\r
+      Width = 15\r
+      Height = 21\r
+      Associate = EditTitle\r
+      Min = 1\r
+      Max = 32767\r
+      Position = 1\r
+      TabOrder = 2\r
+      Thousands = False\r
+      Wrap = False\r
+    end\r
+    object UpDownChapter: TUpDown\r
+      Left = 121\r
+      Top = 48\r
+      Width = 15\r
+      Height = 21\r
+      Associate = EditChapter\r
+      Min = 1\r
+      Max = 32767\r
+      Position = 1\r
+      TabOrder = 3\r
+      Thousands = False\r
+      Wrap = False\r
+    end\r
+  end\r
+  object RadioGroupType: TRadioGroup\r
+    Left = 8\r
+    Top = 8\r
+    Width = 81\r
+    Height = 81\r
+    Caption = 'Disc type'\r
+    ItemIndex = 0\r
+    Items.Strings = (\r
+      'DVD'\r
+      'VCD')\r
+    TabOrder = 0\r
+  end\r
+  object BitBtnOk: TBitBtn\r
+    Left = 8\r
+    Top = 136\r
+    Width = 113\r
+    Height = 25\r
+    Caption = 'OK'\r
+    Default = True\r
+    ModalResult = 1\r
+    TabOrder = 3\r
+    OnClick = BitBtnOkClick\r
+  end\r
+  object BitBtnCancel: TBitBtn\r
+    Left = 136\r
+    Top = 136\r
+    Width = 113\r
+    Height = 25\r
+    Caption = 'Cancel'\r
+    ModalResult = 2\r
+    TabOrder = 4\r
+    OnClick = BitBtnCancelClick\r
+  end\r
+  object EditDevice: TEdit\r
+    Left = 88\r
+    Top = 101\r
+    Width = 161\r
+    Height = 21\r
+    TabOrder = 2\r
+    Text = 'F:\'\r
+  end\r
+end\r
diff --git a/plugins/win32/disc.h b/plugins/win32/disc.h
new file mode 100644 (file)
index 0000000..cc33ea8
--- /dev/null
@@ -0,0 +1,58 @@
+/*****************************************************************************\r
+ * disc.h: "Open disc" dialog box.\r
+ *****************************************************************************\r
+ * Copyright (C) 2002 VideoLAN\r
+ *\r
+ * Authors: Olivier Teuliere <ipkiss@via.ecp.fr>\r
+ *\r
+ * This program is free software; you can redistribute it and/or modify\r
+ * it under the terms of the GNU General Public License as published by\r
+ * the Free Software Foundation; either version 2 of the License, or\r
+ * (at your option) any later version.\r
+ * \r
+ * This program is distributed in the hope that it will be useful,\r
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
+ * GNU General Public License for more details.\r
+ *\r
+ * You should have received a copy of the GNU General Public License\r
+ * along with this program; if not, write to the Free Software\r
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111, USA.\r
+ *****************************************************************************/\r
+\r
+#ifndef discH\r
+#define discH\r
+//---------------------------------------------------------------------------\r
+#include <Classes.hpp>\r
+#include <Controls.hpp>\r
+#include <StdCtrls.hpp>\r
+#include <Forms.hpp>\r
+#include <Buttons.hpp>\r
+#include <ComCtrls.hpp>\r
+#include <ExtCtrls.hpp>\r
+//---------------------------------------------------------------------------\r
+class TDiscDlg : public TForm\r
+{\r
+__published:   // IDE-managed Components\r
+    TLabel *LabelDevice;\r
+    TGroupBox *GroupBoxPosition;\r
+    TLabel *LabelTitle;\r
+    TLabel *LabelChapter;\r
+    TEdit *EditTitle;\r
+    TEdit *EditChapter;\r
+    TUpDown *UpDownTitle;\r
+    TUpDown *UpDownChapter;\r
+    TRadioGroup *RadioGroupType;\r
+    TBitBtn *BitBtnOk;\r
+    TBitBtn *BitBtnCancel;\r
+    TEdit *EditDevice;\r
+    void __fastcall FormShow(TObject *Sender);\r
+    void __fastcall FormHide(TObject *Sender);\r
+    void __fastcall BitBtnCancelClick(TObject *Sender);\r
+    void __fastcall BitBtnOkClick(TObject *Sender);\r
+private:       // User declarations\r
+public:                // User declarations\r
+    __fastcall TDiscDlg( TComponent* Owner );\r
+};\r
+//---------------------------------------------------------------------------\r
+#endif\r
diff --git a/plugins/win32/intf_win32.cpp b/plugins/win32/intf_win32.cpp
new file mode 100644 (file)
index 0000000..696c8c1
--- /dev/null
@@ -0,0 +1,232 @@
+/*****************************************************************************\r
+ * intf_win32.cpp: Win32 interface plugin for vlc\r
+ *****************************************************************************\r
+ * Copyright (C) 2002 VideoLAN\r
+ *\r
+ * Authors: Olivier Teulière <ipkiss@via.ecp.fr>\r
+ *\r
+ * This program is free software; you can redistribute it and/or modify\r
+ * it under the terms of the GNU General Public License as published by\r
+ * the Free Software Foundation; either version 2 of the License, or\r
+ * (at your option) any later version.\r
+ *\r
+ * This program is distributed in the hope that it will be useful,\r
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
+ * GNU General Public License for more details.\r
+ *\r
+ * You should have received a copy of the GNU General Public License\r
+ * along with this program; if not, write to the Free Software\r
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111, USA.\r
+ *****************************************************************************/\r
+\r
+/*****************************************************************************\r
+ * Preamble\r
+ *****************************************************************************/\r
+#include <vcl.h>\r
+#include <stdlib.h>                                      /* malloc(), free() */\r
+#include <errno.h>                                                /* ENOMEM */\r
+#include <string.h>                                           /* strerror() */\r
+\r
+#include <videolan/vlc.h>\r
+\r
+#include "stream_control.h"\r
+#include "input_ext-intf.h"\r
+\r
+#include "interface.h"\r
+\r
+#include "mainframe.h"\r
+#include "menu.h"\r
+#include "win32_common.h"\r
+\r
+struct intf_thread_s *p_intfGlobal;\r
+\r
+/*****************************************************************************\r
+ * Local prototypes.\r
+ *****************************************************************************/\r
+static int  intf_Open      ( intf_thread_t *p_intf );\r
+static void intf_Close     ( intf_thread_t *p_intf );\r
+static void intf_Run       ( intf_thread_t *p_intf );\r
+\r
+int Win32Manage( void *p_data );\r
+\r
+/*****************************************************************************\r
+ * Functions exported as capabilities. They are declared as static so that\r
+ * we don't pollute the namespace too much.\r
+ *****************************************************************************/\r
+void _M( intf_getfunctions )( function_list_t * p_function_list )\r
+{\r
+    p_function_list->functions.intf.pf_open  = intf_Open;\r
+    p_function_list->functions.intf.pf_close = intf_Close;\r
+    p_function_list->functions.intf.pf_run   = intf_Run;\r
+}\r
+\r
+/*****************************************************************************\r
+ * intf_Open: initialize interface\r
+ *****************************************************************************/\r
+static int intf_Open( intf_thread_t *p_intf )\r
+{\r
+    /* Allocate instance and initialize some members */\r
+    p_intf->p_sys = (intf_sys_s *) malloc( sizeof( intf_sys_t ) );\r
+    if( p_intf->p_sys == NULL )\r
+    {\r
+        intf_ErrMsg( "intf error: %s", strerror(ENOMEM) );\r
+        return( 1 );\r
+    };\r
+\r
+    p_intfGlobal = p_intf;\r
+\r
+    p_intf->p_sys->p_sub = intf_MsgSub();\r
+\r
+    /* Initialize Win32 thread */\r
+    p_intf->p_sys->b_playing = 0;\r
+    p_intf->p_sys->b_popup_changed = 0;\r
+    p_intf->p_sys->i_playing = -1;\r
+    p_intf->p_sys->b_slider_free = 1;\r
+\r
+    return( 0 );\r
+}\r
+\r
+/*****************************************************************************\r
+ * intf_Close: destroy interface\r
+ *****************************************************************************/\r
+static void intf_Close( intf_thread_t *p_intf )\r
+{\r
+    intf_MsgUnsub( p_intf->p_sys->p_sub );\r
+\r
+    /* Destroy structure */\r
+    free( p_intf->p_sys );\r
+}\r
+\r
+/*****************************************************************************\r
+ * intf_Run: main loop\r
+ *****************************************************************************/\r
+static void intf_Run( intf_thread_t *p_intf )\r
+{\r
+    p_intf->p_sys->p_window = new TMainFrameDlg( NULL );\r
+    p_intf->p_sys->p_playlist = new TPlaylistDlg( NULL );\r
+    p_intf->p_sys->p_messages = new TMessagesDlg( NULL );\r
+    p_intf->p_sys->p_window->ShowModal();\r
+    if( p_intf->p_sys->p_disc ) delete p_intf->p_sys->p_disc;\r
+    if( p_intf->p_sys->p_network ) delete p_intf->p_sys->p_network;\r
+    if( p_intf->p_sys->p_preferences ) delete p_intf->p_sys->p_preferences;\r
+    delete p_intf->p_sys->p_messages;\r
+    delete p_intf->p_sys->p_playlist;\r
+}\r
+\r
+/*****************************************************************************\r
+ * Win32Manage: manage main thread messages\r
+ *****************************************************************************\r
+ * In this function, called approx. 10 times a second, we check what the\r
+ * main program wanted to tell us.\r
+ *****************************************************************************/\r
+int Win32Manage( intf_thread_t *p_intf )\r
+{\r
+    vlc_mutex_lock( &p_intf->change_lock );\r
+\r
+    /* If the "display popup" flag has changed */\r
+    if( p_intf->b_menu_change )\r
+    {\r
+        /* FIXME: It would be nice to close the popup when the user left-clicks\r
+        elsewhere, or to actualize the position when he right-clicks again,\r
+        but i couldn't find a way to close it :-( */\r
+        TPoint MousePos = Mouse->CursorPos;\r
+        p_intf->p_sys->p_window->PopupMenuMain->Popup( MousePos.x, MousePos.y );\r
+        p_intf->b_menu_change = 0;\r
+    }\r
+\r
+    /* Update the log window */\r
+    p_intf->p_sys->p_messages->UpdateLog();\r
+\r
+    /* Update the playlist */\r
+    p_intf->p_sys->p_playlist->Manage( p_intf );\r
+\r
+    if( p_input_bank->pp_input[0] != NULL )\r
+    {\r
+        vlc_mutex_lock( &p_input_bank->pp_input[0]->stream.stream_lock );\r
+\r
+        if( !p_input_bank->pp_input[0]->b_die )\r
+        {\r
+            /* New input or stream map change */\r
+            if( p_input_bank->pp_input[0]->stream.b_changed )\r
+            {\r
+                p_intf->p_sys->p_window->ModeManage();\r
+                SetupMenus( p_intf );\r
+                p_intf->p_sys->b_playing = 1;\r
+            }\r
+\r
+            /* Manage the slider */\r
+            if( p_input_bank->pp_input[0]->stream.b_seekable &&\r
+                p_intf->p_sys->b_playing )\r
+            {\r
+                TTrackBar * TrackBar = p_intf->p_sys->p_window->TrackBar;\r
+                off_t NewValue = TrackBar->Position;\r
+\r
+#define p_area p_input_bank->pp_input[0]->stream.p_selected_area\r
+                /* If the user hasn't touched the slider since the last time,\r
+                 * then the input can safely change it */\r
+                if( NewValue == p_intf->p_sys->OldValue )\r
+                {\r
+                    /* Update the value */\r
+                    TrackBar->Position = p_intf->p_sys->OldValue =\r
+                        ( (off_t)SLIDER_MAX_VALUE * p_area->i_tell ) /\r
+                                p_area->i_size;\r
+                }\r
+                /* Otherwise, send message to the input if the user has\r
+                 * finished dragging the slider */\r
+                else if( p_intf->p_sys->b_slider_free )\r
+                {\r
+                    off_t i_seek = ( NewValue * p_area->i_size ) /\r
+                                (off_t)SLIDER_MAX_VALUE;\r
+\r
+                    /* release the lock to be able to seek */\r
+                    vlc_mutex_unlock( &p_input_bank->pp_input[0]->stream.stream_lock );\r
+                    input_Seek( p_input_bank->pp_input[0], i_seek );\r
+                    vlc_mutex_lock( &p_input_bank->pp_input[0]->stream.stream_lock );\r
+\r
+                    /* Update the old value */\r
+                    p_intf->p_sys->OldValue = NewValue;\r
+                }\r
+\r
+                /* Update the display */\r
+//                TrackBar->Invalidate();\r
+                \r
+#    undef p_area\r
+            }\r
+\r
+            if( p_intf->p_sys->i_part !=\r
+                p_input_bank->pp_input[0]->stream.p_selected_area->i_part )\r
+            {\r
+//                p_intf->p_sys->b_chapter_update = 1;\r
+                SetupMenus( p_intf );\r
+            }\r
+        }\r
+\r
+        vlc_mutex_unlock( &p_input_bank->pp_input[0]->stream.stream_lock );\r
+    }\r
+    else if( p_intf->p_sys->b_playing && !p_intf->b_die )\r
+    {\r
+        p_intf->p_sys->p_window->ModeManage();\r
+        p_intf->p_sys->b_playing = 0;\r
+    }\r
+\r
+    /* Manage core vlc functions through the callback */\r
+    p_intf->pf_manage( p_intf );\r
+\r
+    if( p_intf->b_die )\r
+    {\r
+        vlc_mutex_unlock( &p_intf->change_lock );\r
+\r
+        /* Prepare to die, young Skywalker */\r
+        p_intf->p_sys->p_window->ModalResult = mrOk;\r
+        delete p_intf->p_sys->p_window;\r
+\r
+        /* Just in case */\r
+        return( FALSE );\r
+    }\r
+     \r
+    vlc_mutex_unlock( &p_intf->change_lock );\r
+\r
+    return( TRUE );\r
+}\r
+\r
diff --git a/plugins/win32/intfwin.bpf b/plugins/win32/intfwin.bpf
new file mode 100644 (file)
index 0000000..24e5c00
--- /dev/null
@@ -0,0 +1,16 @@
+USEUNIT("win32.cpp");\r
+USEUNIT("intf_win32.cpp");\r
+USEFORM("mainframe.cpp", MainFrameDlg);\r
+USEFORM("network.cpp", NetworkDlg);\r
+USEFORM("playlist.cpp", PlaylistDlg);\r
+USEFORM("preferences.cpp", PreferencesDlg);\r
+USEFORM("about.cpp", AboutDlg);\r
+USEFORM("disc.cpp", DiscDlg);\r
+USEUNIT("control.cpp");\r
+USE("win32_common.h", File);\r
+USEUNIT("menu.cpp");\r
+USEFORM("messages.cpp", MessagesDlg);\r
+//---------------------------------------------------------------------------\r
+This file is used by the project manager only and should be treated like the project file\r
+
+\rDllEntryPoint
\ No newline at end of file
diff --git a/plugins/win32/intfwin.bpr b/plugins/win32/intfwin.bpr
new file mode 100644 (file)
index 0000000..6427681
--- /dev/null
@@ -0,0 +1,110 @@
+<?xml version='1.0' encoding='utf-8' ?>\r
+<!-- C++Builder XML Project -->\r
+<PROJECT>\r
+  <MACROS>\r
+    <VERSION value="BCB.05.03"/>\r
+    <PROJECT value="intfwin.so"/>\r
+    <OBJFILES value="win32.obj intf_win32.obj mainframe.obj network.obj playlist.obj \r
+      preferences.obj about.obj disc.obj control.obj menu.obj messages.obj"/>\r
+    <RESFILES value=""/>\r
+    <DEFFILE value=""/>\r
+    <RESDEPEN value="$(RESFILES) mainframe.dfm network.dfm playlist.dfm preferences.dfm \r
+      about.dfm disc.dfm messages.dfm"/>\r
+    <LIBFILES value=""/>\r
+    <LIBRARIES value="VCL50.lib"/>\r
+    <SPARELIBS value="VCL50.lib"/>\r
+    <PACKAGES value="VCL50.bpi VCLX50.bpi bcbsmp50.bpi QRPT50.bpi VCLDB50.bpi VCLBDE50.bpi \r
+      ibsmp50.bpi VCLDBX50.bpi TEEUI50.bpi TEEDB50.bpi TEE50.bpi TEEQR50.bpi \r
+      VCLIB50.bpi bcbie50.bpi VCLIE50.bpi INETDB50.bpi INET50.bpi NMFAST50.bpi"/>\r
+    <PATHCPP value=".;"/>\r
+    <PATHPAS value=".;"/>\r
+    <PATHRC value=".;"/>\r
+    <PATHASM value=".;"/>\r
+    <DEBUGLIBPATH value="$(BCB)\lib\debug"/>\r
+    <RELEASELIBPATH value="$(BCB)\lib\release"/>\r
+    <LINKER value="tlink32"/>\r
+    <USERDEFINES value="_DEBUG"/>\r
+    <SYSDEFINES value="NO_STRICT"/>\r
+    <MAINSOURCE value="intfwin.bpf"/>\r
+    <INCLUDEPATH value="..\..\win32;$(BCB)\include;$(BCB)\include\vcl;..\..\include;..\..\src\misc"/>\r
+    <LIBPATH value="..\..\win32;$(BCB)\lib\obj;$(BCB)\lib"/>\r
+    <WARNINGS value="-w-par"/>\r
+  </MACROS>\r
+  <OPTIONS>\r
+    <CFLAG1 value="-WD -Od -H=$(BCB)\lib\vcl50.csm -Hc -Vx -Ve -X- -r- -a8 -b- -k -y -v -vi- \r
+      -tWD -tWM -c"/>\r
+    <PFLAGS value="-$Y+ -$W -$O- -v -JPHNE -M"/>\r
+    <RFLAGS value=""/>\r
+    <AFLAGS value="/mx /w2 /zi"/>\r
+    <LFLAGS value="-D&quot;&quot; -aa -Tpd -x -Gn -Gi -v"/>\r
+  </OPTIONS>\r
+  <LINKER>\r
+    <ALLOBJ value="c0d32.obj sysinit.obj $(OBJFILES)"/>\r
+    <ALLRES value="$(RESFILES)"/>\r
+    <ALLLIB value="$(LIBFILES) $(LIBRARIES) import32.lib cp32mt.lib"/>\r
+  </LINKER>\r
+  <IDEOPTIONS>\r
+[Version Info]\r
+IncludeVerInfo=0\r
+AutoIncBuild=0\r
+MajorVer=1\r
+MinorVer=0\r
+Release=0\r
+Build=0\r
+Debug=0\r
+PreRelease=0\r
+Special=0\r
+Private=0\r
+DLL=0\r
+Locale=1036\r
+CodePage=1252\r
+\r
+[Version Info Keys]\r
+CompanyName=\r
+FileDescription=\r
+FileVersion=1.0.0.0\r
+InternalName=\r
+LegalCopyright=\r
+LegalTrademarks=\r
+OriginalFilename=\r
+ProductName=\r
+ProductVersion=1.0.0.0\r
+Comments=\r
+\r
+[HistoryLists\hlIncludePath]\r
+Count1=\r
+Item0=..\win32;..\..\win32;$(BCB)\include;$(BCB)\include\vcl;..\..\include;..\..\src\misc\r
+\r
+[HistoryLists\hlLibraryPath]\r
+Count=1\r
+Item0=..\win32;..\..\win32;$(BCB)\lib\obj;$(BCB)\lib\r
+\r
+[HistoryLists\hlDebugSourcePath]\r
+Count=1\r
+Item0=$(BCB)\source\vcl\r
+\r
+[HistoryLists\hlConditionals]\r
+Count=1\r
+Item0=_DEBUG\r
+\r
+[Debugging]\r
+DebugSourceDirs=$(BCB)\source\vcl\r
+\r
+[Parameters]\r
+RunParams=\r
+HostApplication=\r
+RemoteHost=\r
+RemotePath=\r
+RemoteDebug=0\r
+\r
+[Compiler]\r
+ShowInfoMsgs=0\r
+LinkDebugVcl=0\r
+LinkCGLIB=0\r
+\r
+[Language]\r
+ActiveLang=\r
+ProjectLang=\r
+RootDir=\r
+  </IDEOPTIONS>\r
+</PROJECT>\r
diff --git a/plugins/win32/mainframe.cpp b/plugins/win32/mainframe.cpp
new file mode 100644 (file)
index 0000000..38e4d82
--- /dev/null
@@ -0,0 +1,691 @@
+/*****************************************************************************\r
+ * mainframe.cpp: Win32 interface plugin for vlc\r
+ *****************************************************************************\r
+ * Copyright (C) 2002 VideoLAN\r
+ *\r
+ * Authors: Olivier Teulière <ipkiss@via.ecp.fr>\r
+ *\r
+ * This program is free software; you can redistribute it and/or modify\r
+ * it under the terms of the GNU General Public License as published by\r
+ * the Free Software Foundation; either version 2 of the License, or\r
+ * (at your option) any later version.\r
+ *\r
+ * This program is distributed in the hope that it will be useful,\r
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
+ * GNU General Public License for more details.\r
+ *\r
+ * You should have received a copy of the GNU General Public License\r
+ * along with this program; if not, write to the Free Software\r
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111, USA.\r
+ *****************************************************************************/\r
+\r
+#include <vcl.h>\r
+#pragma hdrstop\r
+\r
+#include <videolan/vlc.h>\r
+\r
+#include "stream_control.h"\r
+#include "input_ext-intf.h"\r
+\r
+#include "video.h"\r
+#include "video_output.h"\r
+\r
+#include "interface.h"\r
+#include "intf_playlist.h"\r
+#include "intf_eject.h"\r
+\r
+#include "mainframe.h"\r
+#include "menu.h"\r
+#include "control.h"\r
+#include "disc.h"\r
+#include "network.h"\r
+#include "about.h"\r
+#include "preferences.h"\r
+#include "messages.h"\r
+#include "playlist.h"\r
+#include "win32_common.h"\r
+\r
+#include "netutils.h"\r
+\r
+//---------------------------------------------------------------------------\r
+//#pragma package(smart_init)\r
+#pragma resource "*.dfm"\r
+\r
+extern struct intf_thread_s *p_intfGlobal;\r
+extern int Win32Manage( intf_thread_t *p_intf );\r
+\r
+//---------------------------------------------------------------------------\r
+__fastcall TMainFrameDlg::TMainFrameDlg( TComponent* Owner )\r
+        : TForm( Owner )\r
+{\r
+    Application->ShowHint = true;\r
+    Application->OnHint = DisplayHint;\r
+\r
+    TimerManage->Interval = INTF_IDLE_SLEEP / 1000;\r
+\r
+    TrackBar->Max = SLIDER_MAX_VALUE;\r
+\r
+    /* default height */\r
+    ClientHeight = 65;\r
+}\r
+//---------------------------------------------------------------------------\r
+\r
+\r
+/*****************************************************************************\r
+ * Event handlers\r
+ ****************************************************************************/\r
+void __fastcall TMainFrameDlg::TimerManageTimer( TObject *Sender )\r
+{\r
+    Win32Manage( p_intfGlobal );\r
+}\r
+//---------------------------------------------------------------------------\r
+void __fastcall TMainFrameDlg::DisplayHint( TObject *Sender )\r
+{\r
+    StatusBar->SimpleText = GetLongHint( Application->Hint );\r
+}\r
+//---------------------------------------------------------------------------\r
+void __fastcall TMainFrameDlg::TrackBarChange( TObject *Sender )\r
+{\r
+    /* This function displays the current date related to the position in\r
+     * the stream. It is called whenever the slider changes its value.\r
+     * The lock has to be taken before the function is called */\r
+\r
+//    vlc_mutex_lock( &p_input_bank->pp_input[0]->stream.stream_lock );\r
+\r
+    if( p_input_bank->pp_input[0] != NULL )\r
+    {\r
+#define p_area p_input_bank->pp_input[0]->stream.p_selected_area\r
+        char psz_time[ OFFSETTOTIME_MAX_SIZE ];\r
+        off_t Value = TrackBar->Position;\r
+\r
+        GroupBoxSlider->Caption =\r
+                input_OffsetToTime( p_input_bank->pp_input[0], psz_time,\r
+                        ( p_area->i_size * Value ) / (off_t)SLIDER_MAX_VALUE );\r
+#undef p_area\r
+     }\r
+\r
+//    vlc_mutex_unlock( &p_input_bank->pp_input[0]->stream.stream_lock );\r
+}\r
+//---------------------------------------------------------------------------\r
+void __fastcall TMainFrameDlg::FormClose( TObject *Sender,\r
+      TCloseAction &Action )\r
+{\r
+    intf_thread_t *p_intf = p_intfGlobal;\r
+\r
+    vlc_mutex_lock( &p_intf->change_lock );\r
+    p_intf->b_die = 1;\r
+    vlc_mutex_unlock( &p_intf->change_lock );\r
+\r
+    /* we don't destroy the form immediatly */\r
+    Action = caHide;\r
+}\r
+//---------------------------------------------------------------------------\r
+\r
+\r
+/*****************************************************************************\r
+ * Menu callbacks\r
+ ****************************************************************************/\r
+void __fastcall TMainFrameDlg::MenuOpenFileClick( TObject *Sender )\r
+{\r
+    int             i_end = p_main->p_playlist->i_size;\r
+    AnsiString      FileName;\r
+    if( OpenDialog1->Execute() )\r
+    {\r
+        /* add the new file to the interface playlist */\r
+        FileName = OpenDialog1->FileName;\r
+        intf_PlaylistAdd( p_main->p_playlist, PLAYLIST_END,\r
+            (char*)FileName.c_str() );\r
+\r
+        /* update the plugin display */\r
+        p_intfGlobal->p_sys->p_playlist->UpdateGrid( p_main->p_playlist );\r
+\r
+        /* end current item, select added item  */\r
+        if( p_input_bank->pp_input[0] != NULL )\r
+        {\r
+            p_input_bank->pp_input[0]->b_eof = 1;\r
+        }\r
+\r
+        intf_PlaylistJumpto( p_main->p_playlist, i_end - 1 );\r
+    };\r
+}\r
+//---------------------------------------------------------------------------\r
+void __fastcall TMainFrameDlg::MenuOpenDiscClick( TObject *Sender )\r
+{\r
+    TDiscDlg *p_disc = p_intfGlobal->p_sys->p_disc;\r
+    if( p_disc == NULL )\r
+    {\r
+        p_disc = new TDiscDlg( this );\r
+        p_intfGlobal->p_sys->p_disc = p_disc;\r
+    }\r
+    p_disc->Show();\r
+}\r
+//---------------------------------------------------------------------------\r
+void __fastcall TMainFrameDlg::MenuNetworkStreamClick( TObject *Sender )\r
+{\r
+    TNetworkDlg *p_network = p_intfGlobal->p_sys->p_network;\r
+    if( p_network == NULL )\r
+    {\r
+        p_network = new TNetworkDlg( this );\r
+        p_intfGlobal->p_sys->p_network = p_network;\r
+    }\r
+    p_network->Show();\r
+}\r
+//---------------------------------------------------------------------------\r
+void __fastcall TMainFrameDlg::MenuExitClick( TObject *Sender )\r
+{\r
+    Close();\r
+}\r
+//---------------------------------------------------------------------------\r
+void __fastcall TMainFrameDlg::MenuFullscreenClick( TObject *Sender )\r
+{\r
+    if( p_vout_bank->i_count )\r
+    {\r
+        vlc_mutex_lock( &p_vout_bank->pp_vout[0]->change_lock );\r
+\r
+        p_vout_bank->pp_vout[0]->i_changes |= VOUT_FULLSCREEN_CHANGE;\r
+\r
+        vlc_mutex_unlock( &p_vout_bank->pp_vout[0]->change_lock );\r
+    }\r
+}\r
+//---------------------------------------------------------------------------\r
+void __fastcall TMainFrameDlg::MenuPlaylistClick( TObject *Sender )\r
+{\r
+    TPlaylistDlg *p_playlist = p_intfGlobal->p_sys->p_playlist;\r
+    if( p_playlist->Visible )\r
+    {\r
+        p_playlist->Hide();\r
+    }\r
+    else\r
+    {\r
+        p_playlist->UpdateGrid( p_main->p_playlist );\r
+        p_playlist->Show();\r
+    }\r
+}\r
+//---------------------------------------------------------------------------\r
+void __fastcall TMainFrameDlg::MenuMessagesClick( TObject *Sender )\r
+{\r
+     p_intfGlobal->p_sys->p_messages->Show();\r
+}\r
+//---------------------------------------------------------------------------\r
+void __fastcall TMainFrameDlg::MenuPreferencesClick( TObject *Sender )\r
+{\r
+    TPreferencesDlg *p_preferences = p_intfGlobal->p_sys->p_preferences;\r
+    if( p_preferences == NULL )\r
+    {\r
+        p_preferences = new TPreferencesDlg( this );\r
+        p_preferences->CreateConfigDialog( "main" );\r
+        p_intfGlobal->p_sys->p_preferences = p_preferences;\r
+    }\r
+    else\r
+    {\r
+        p_preferences->Show();\r
+    }\r
+}\r
+//---------------------------------------------------------------------------\r
+void __fastcall TMainFrameDlg::MenuAboutClick( TObject *Sender )\r
+{\r
+    p_intfGlobal->p_sys->p_about = new TAboutDlg( this );\r
+    p_intfGlobal->p_sys->p_about->ShowModal();\r
+    delete p_intfGlobal->p_sys->p_about;\r
+}\r
+//---------------------------------------------------------------------------\r
+\r
+\r
+/*****************************************************************************\r
+ * Toolbar callbacks\r
+ ****************************************************************************/\r
+void __fastcall TMainFrameDlg::ToolButtonFileClick( TObject *Sender )\r
+{\r
+    MenuOpenFileClick( Sender );\r
+}\r
+//---------------------------------------------------------------------------\r
+void __fastcall TMainFrameDlg::ToolButtonDiscClick( TObject *Sender )\r
+{\r
+    MenuOpenDiscClick( Sender );\r
+}\r
+//---------------------------------------------------------------------------\r
+void __fastcall TMainFrameDlg::ToolButtonNetClick( TObject *Sender )\r
+{\r
+    MenuNetworkStreamClick( Sender );\r
+}\r
+//---------------------------------------------------------------------------\r
+void __fastcall TMainFrameDlg::ToolButtonPlaylistClick( TObject *Sender )\r
+{\r
+    MenuPlaylistClick( Sender );\r
+}\r
+//---------------------------------------------------------------------------\r
+void __fastcall TMainFrameDlg::ToolButtonBackClick( TObject *Sender )\r
+{\r
+    ControlBack( Sender );\r
+}\r
+//---------------------------------------------------------------------------\r
+void __fastcall TMainFrameDlg::ToolButtonStopClick( TObject *Sender )\r
+{\r
+    ControlStop( Sender );\r
+}\r
+//---------------------------------------------------------------------------\r
+void __fastcall TMainFrameDlg::ToolButtonPlayClick( TObject *Sender )\r
+{\r
+    ControlPlay( Sender );\r
+}\r
+//---------------------------------------------------------------------------\r
+void __fastcall TMainFrameDlg::ToolButtonPauseClick( TObject *Sender )\r
+{\r
+    ControlPause( Sender );\r
+}\r
+//---------------------------------------------------------------------------\r
+void __fastcall TMainFrameDlg::ToolButtonSlowClick( TObject *Sender )\r
+{\r
+    ControlSlow( Sender );\r
+}\r
+//---------------------------------------------------------------------------\r
+void __fastcall TMainFrameDlg::ToolButtonFastClick( TObject *Sender )\r
+{\r
+    ControlFast( Sender );\r
+}\r
+//---------------------------------------------------------------------------\r
+void __fastcall TMainFrameDlg::ToolButtonPrevClick( TObject *Sender )\r
+{\r
+    p_intfGlobal->p_sys->p_playlist->Previous();\r
+}\r
+//---------------------------------------------------------------------------\r
+void __fastcall TMainFrameDlg::ToolButtonNextClick( TObject *Sender )\r
+{\r
+    p_intfGlobal->p_sys->p_playlist->Next();\r
+}\r
+//---------------------------------------------------------------------------\r
+void __fastcall TMainFrameDlg::ToolButtonEjectClick( TObject *Sender )\r
+{\r
+    AnsiString Device = "";\r
+\r
+    /*\r
+     * Get the active input\r
+     * Determine whether we can eject a media, ie it's a VCD or DVD\r
+     * If it's neither a VCD nor a DVD, then return\r
+     */\r
+\r
+    if( p_main->p_playlist->current.psz_name != NULL )\r
+    {\r
+        if( strncmp( p_main->p_playlist->current.psz_name, "dvd", 3 )\r
+            || strncmp( p_main->p_playlist->current.psz_name, "vcd", 3 ) )\r
+        {\r
+            /* Determine the device name by omitting the first 4 characters\r
+             * and keeping 3 characters */\r
+            Device = strdup( ( p_main->p_playlist->current.psz_name + 4 ) );\r
+            Device = Device.SubString( 1, 2 );\r
+        }\r
+    }\r
+\r
+    if( Device == "" )\r
+    {\r
+        return;\r
+    }\r
+\r
+    /* If there's a stream playing, we aren't allowed to eject ! */\r
+    if( p_input_bank->pp_input[0] == NULL )\r
+    {\r
+        intf_WarnMsg( 4, "intf: ejecting %s", Device.c_str() );\r
+\r
+        intf_Eject( Device.c_str() );\r
+    }\r
+}\r
+//--------------------------------------------------------------------------\r
+\r
+\r
+/*****************************************************************************\r
+ * Popup callbacks\r
+ ****************************************************************************/\r
+void __fastcall TMainFrameDlg::PopupCloseClick( TObject *Sender )\r
+{\r
+    /* We do nothing, we just need a click on a menu item\r
+     * to close the popup. Don't ask me why... */\r
+    return;\r
+}\r
+//---------------------------------------------------------------------------\r
+void __fastcall TMainFrameDlg::PopupPlayClick( TObject *Sender )\r
+{\r
+    ToolButtonPlayClick( Sender );\r
+}\r
+//---------------------------------------------------------------------------\r
+void __fastcall TMainFrameDlg::PopupPauseClick( TObject *Sender )\r
+{\r
+    ToolButtonPauseClick( Sender );\r
+}\r
+//---------------------------------------------------------------------------\r
+void __fastcall TMainFrameDlg::PopupStopClick( TObject *Sender )\r
+{\r
+    ToolButtonStopClick( Sender );\r
+}\r
+//---------------------------------------------------------------------------\r
+void __fastcall TMainFrameDlg::PopupBackClick( TObject *Sender )\r
+{\r
+    ToolButtonBackClick( Sender );\r
+}\r
+//---------------------------------------------------------------------------\r
+void __fastcall TMainFrameDlg::PopupSlowClick( TObject *Sender )\r
+{\r
+    ToolButtonSlowClick( Sender );\r
+}\r
+//---------------------------------------------------------------------------\r
+void __fastcall TMainFrameDlg::PopupFastClick( TObject *Sender )\r
+{\r
+    ToolButtonFastClick( Sender );\r
+}\r
+//---------------------------------------------------------------------------\r
+void __fastcall TMainFrameDlg::PopupToggleInterfaceClick( TObject *Sender )\r
+{\r
+    this->BringToFront();\r
+}\r
+//---------------------------------------------------------------------------\r
+void __fastcall TMainFrameDlg::PopupFullscreenClick( TObject *Sender )\r
+{\r
+    MenuFullscreenClick( Sender );\r
+}\r
+//---------------------------------------------------------------------------\r
+void __fastcall TMainFrameDlg::PopupNextClick( TObject *Sender )\r
+{\r
+    ToolButtonNextClick( Sender );\r
+}\r
+//---------------------------------------------------------------------------\r
+void __fastcall TMainFrameDlg::PopupPrevClick( TObject *Sender )\r
+{\r
+    ToolButtonPrevClick( Sender );\r
+}\r
+//---------------------------------------------------------------------------\r
+void __fastcall TMainFrameDlg::PopupJumpClick( TObject *Sender )\r
+{\r
+    // TODO\r
+}\r
+//---------------------------------------------------------------------------\r
+void __fastcall TMainFrameDlg::PopupPlaylistClick( TObject *Sender )\r
+{\r
+    MenuPlaylistClick( Sender );\r
+}\r
+//---------------------------------------------------------------------------\r
+void __fastcall TMainFrameDlg::PopupPreferencesClick( TObject *Sender )\r
+{\r
+    MenuPreferencesClick( Sender );\r
+}\r
+//---------------------------------------------------------------------------\r
+void __fastcall TMainFrameDlg::PopupExitClick( TObject *Sender )\r
+{\r
+    MenuExitClick( Sender );\r
+}\r
+//---------------------------------------------------------------------------\r
+void __fastcall TMainFrameDlg::PopupOpenFileClick( TObject *Sender )\r
+{\r
+    MenuOpenFileClick( Sender );\r
+}\r
+//---------------------------------------------------------------------------\r
+void __fastcall TMainFrameDlg::PopupOpenDiscClick( TObject *Sender )\r
+{\r
+    MenuOpenDiscClick( Sender );\r
+}\r
+//---------------------------------------------------------------------------\r
+void __fastcall TMainFrameDlg::PopupNetworkStreamClick( TObject *Sender )\r
+{\r
+    MenuNetworkStreamClick( Sender );\r
+}\r
+//---------------------------------------------------------------------------\r
+\r
+\r
+/*****************************************************************************\r
+ * Callbacks for DVD/VCD navigation\r
+ ****************************************************************************/\r
+void __fastcall TMainFrameDlg::ButtonTitlePrevClick( TObject *Sender )\r
+{\r
+    intf_thread_t * p_intf;\r
+    input_area_t  * p_area;\r
+    int             i_id;\r
+\r
+    p_intf = p_intfGlobal;\r
+    i_id = p_input_bank->pp_input[0]->stream.p_selected_area->i_id - 1;\r
+\r
+    /* Disallow area 0 since it is used for video_ts.vob */\r
+    if( i_id > 0 )\r
+    {\r
+        p_area = p_input_bank->pp_input[0]->stream.pp_areas[i_id];\r
+        input_ChangeArea( p_input_bank->pp_input[0], (input_area_t*)p_area );\r
+\r
+        input_SetStatus( p_input_bank->pp_input[0], INPUT_STATUS_PLAY );\r
+\r
+        p_intf->p_sys->b_title_update = 1;\r
+        vlc_mutex_lock( &p_input_bank->pp_input[0]->stream.stream_lock );\r
+        SetupMenus( p_intf );\r
+        vlc_mutex_unlock( &p_input_bank->pp_input[0]->stream.stream_lock );\r
+    }\r
+}\r
+//---------------------------------------------------------------------------\r
+void __fastcall TMainFrameDlg::ButtonTitleNextClick( TObject *Sender )\r
+{\r
+    intf_thread_t * p_intf;\r
+    input_area_t  * p_area;\r
+    int             i_id;\r
+\r
+    p_intf = p_intfGlobal;\r
+    i_id = p_input_bank->pp_input[0]->stream.p_selected_area->i_id + 1;\r
+\r
+    if( i_id < p_input_bank->pp_input[0]->stream.i_area_nb )\r
+    {\r
+        p_area = p_input_bank->pp_input[0]->stream.pp_areas[i_id];   \r
+        input_ChangeArea( p_input_bank->pp_input[0], (input_area_t*)p_area );\r
+                  \r
+        input_SetStatus( p_input_bank->pp_input[0], INPUT_STATUS_PLAY );\r
+\r
+        p_intf->p_sys->b_title_update = 1;\r
+        vlc_mutex_lock( &p_input_bank->pp_input[0]->stream.stream_lock );\r
+        SetupMenus( p_intf );\r
+        vlc_mutex_unlock( &p_input_bank->pp_input[0]->stream.stream_lock );\r
+    }\r
+}\r
+//---------------------------------------------------------------------------\r
+void __fastcall TMainFrameDlg::ButtonChapterPrevClick( TObject *Sender )\r
+{\r
+    intf_thread_t * p_intf = p_intfGlobal;\r
+    input_area_t  * p_area;\r
+\r
+    p_area = p_input_bank->pp_input[0]->stream.p_selected_area;\r
+\r
+    if( p_area->i_part > 0 )\r
+    {\r
+        p_area->i_part--;\r
+        input_ChangeArea( p_input_bank->pp_input[0], (input_area_t*)p_area );\r
+\r
+        input_SetStatus( p_input_bank->pp_input[0], INPUT_STATUS_PLAY );\r
+\r
+        p_intf->p_sys->b_chapter_update = 1;\r
+        vlc_mutex_lock( &p_input_bank->pp_input[0]->stream.stream_lock );\r
+        SetupMenus( p_intf );\r
+        vlc_mutex_unlock( &p_input_bank->pp_input[0]->stream.stream_lock );\r
+    }\r
+}\r
+//---------------------------------------------------------------------------\r
+void __fastcall TMainFrameDlg::ButtonChapterNextClick( TObject *Sender )\r
+{\r
+    intf_thread_t * p_intf = p_intfGlobal;\r
+    input_area_t  * p_area;\r
+\r
+    p_area = p_input_bank->pp_input[0]->stream.p_selected_area;\r
+    \r
+    if( p_area->i_part < p_area->i_part_nb )\r
+    {\r
+        p_area->i_part++;\r
+        input_ChangeArea( p_input_bank->pp_input[0], (input_area_t*)p_area );\r
+\r
+        input_SetStatus( p_input_bank->pp_input[0], INPUT_STATUS_PLAY );\r
+\r
+        p_intf->p_sys->b_chapter_update = 1;\r
+        vlc_mutex_lock( &p_input_bank->pp_input[0]->stream.stream_lock );\r
+        SetupMenus( p_intf );\r
+        vlc_mutex_unlock( &p_input_bank->pp_input[0]->stream.stream_lock );\r
+    }\r
+}\r
+//---------------------------------------------------------------------------\r
+\r
+\r
+/*****************************************************************************\r
+ * Callback for the 'go!' button\r
+ ****************************************************************************/\r
+void __fastcall TMainFrameDlg::ButtonGoClick( TObject *Sender )\r
+{\r
+    intf_thread_t *p_intf = p_intfGlobal;\r
+    int i_channel;\r
+\r
+    i_channel = UpDownChannel->Position;\r
+    intf_WarnMsg( 3, "intf info: joining channel %d", i_channel );\r
+\r
+    vlc_mutex_lock( &p_intf->change_lock );\r
+    if( p_input_bank->pp_input[0] != NULL )\r
+    {\r
+        /* end playing item */\r
+        p_input_bank->pp_input[0]->b_eof = 1;\r
+\r
+        /* update playlist */\r
+        vlc_mutex_lock( &p_main->p_playlist->change_lock );\r
+\r
+        p_main->p_playlist->i_index--;\r
+        p_main->p_playlist->b_stopped = 1;\r
+\r
+        vlc_mutex_unlock( &p_main->p_playlist->change_lock );\r
+\r
+        /* FIXME: ugly hack to close input and outputs */\r
+        p_intf->pf_manage( p_intf );\r
+    }\r
+\r
+    network_ChannelJoin( i_channel );\r
+\r
+    /* FIXME 2 */\r
+    p_main->p_playlist->b_stopped = 0;\r
+    p_intf->pf_manage( p_intf );\r
+\r
+    vlc_mutex_unlock( &p_intf->change_lock );\r
+\r
+//    input_SetStatus( p_input_bank->pp_input[0], INPUT_STATUS_PLAY );\r
+}\r
+//---------------------------------------------------------------------------\r
+\r
+\r
+/*****************************************************************************\r
+ * ModeManage: actualise the aspect of the interface whenever the input\r
+ *             changes.\r
+ *****************************************************************************\r
+ * The lock has to be taken before you call the function.\r
+ *****************************************************************************/\r
+void __fastcall TMainFrameDlg::ModeManage()\r
+{\r
+    intf_thread_t * p_intf = p_intfGlobal;\r
+    TGroupBox     * ActiveGB;\r
+    int             i_Height;\r
+    bool            b_control;\r
+\r
+    /* hide all boxes */\r
+    GroupBoxFile->Visible = false;\r
+    GroupBoxNetwork->Visible = false;\r
+    GroupBoxDisc->Visible = false;\r
+\r
+    /* hide slider */\r
+    GroupBoxSlider->Hide();\r
+\r
+    /* controls unavailable */\r
+    b_control = 0;\r
+\r
+    /* show the box related to current input mode */\r
+    if( p_input_bank->pp_input[0] != NULL )\r
+    {\r
+        switch( p_input_bank->pp_input[0]->stream.i_method & 0xf0 )\r
+        {    \r
+            case INPUT_METHOD_FILE:\r
+                GroupBoxFile->Visible = true;\r
+                ActiveGB = GroupBoxFile;\r
+                LabelFileName->Caption = p_input_bank->pp_input[0]->psz_source;\r
+                break;\r
+            case INPUT_METHOD_DISC:\r
+                GroupBoxDisc->Visible = true;\r
+                ActiveGB = GroupBoxDisc;\r
+                break;\r
+            case INPUT_METHOD_NETWORK:\r
+                GroupBoxNetwork->Visible = true;\r
+                ActiveGB = GroupBoxNetwork;\r
+                LabelServer->Caption = p_input_bank->pp_input[0]->psz_source;\r
+                if( config_GetIntVariable( "network_channel" ) )\r
+                {\r
+                    LabelChannel->Visible = true;\r
+                }\r
+                else\r
+                {\r
+                    LabelChannel->Visible = false;\r
+                }\r
+                break;\r
+            default:\r
+                intf_WarnMsg( 3, "intf: can't determine input method" );\r
+                GroupBoxFile->Visible = true;\r
+                ActiveGB = GroupBoxFile;\r
+                LabelFileName->Caption = p_input_bank->pp_input[0]->psz_source;\r
+                break;\r
+        }\r
+    \r
+        i_Height = StatusBar->Height + ActiveGB->Height + 72;\r
+\r
+        /* initialize and show slider for seekable streams */\r
+        if( p_input_bank->pp_input[0]->stream.b_seekable )\r
+        {\r
+            TrackBar->Position = p_intf->p_sys->OldValue = 0;\r
+            GroupBoxSlider->Show();\r
+            i_Height += GroupBoxSlider->Height;\r
+        }\r
+\r
+        /* resize main window */\r
+        this->Height = i_Height;\r
+\r
+        /* control buttons for free pace streams */\r
+        b_control = p_input_bank->pp_input[0]->stream.b_pace_control;\r
+\r
+        /* get ready for menu regeneration */\r
+        p_intf->p_sys->b_program_update = 1;\r
+        p_intf->p_sys->b_title_update = 1;\r
+        p_intf->p_sys->b_chapter_update = 1;\r
+        p_intf->p_sys->b_audio_update = 1;\r
+        p_intf->p_sys->b_spu_update = 1;\r
+        p_intf->p_sys->i_part = 0;\r
+    \r
+        p_input_bank->pp_input[0]->stream.b_changed = 0;\r
+        intf_WarnMsg( 3, "intf: stream has changed, refreshing interface" );\r
+    }\r
+    else\r
+    {\r
+        if( config_GetIntVariable( "network_channel" ) )\r
+        {\r
+            GroupBoxNetwork->Visible = true;\r
+            LabelChannel->Visible = true;\r
+        }\r
+        else\r
+        {\r
+            /* default mode */\r
+            ClientHeight = 65;\r
+\r
+            /* unsensitize menus */\r
+            MenuProgram->Enabled = false;\r
+            MenuTitle->Enabled = false;\r
+            MenuChapter->Enabled = false;\r
+            MenuAudio->Enabled = false;\r
+            MenuSubtitles->Enabled = false;\r
+            PopupNavigation->Enabled = false;\r
+            PopupAudio->Enabled = false;\r
+            PopupSubtitles->Enabled = false;\r
+        }\r
+    }\r
+\r
+    /* set control items */\r
+    ToolButtonBack->Enabled = false;\r
+    ToolButtonStop->Enabled = true;\r
+    ToolButtonEject->Enabled = !b_control;\r
+    ToolButtonPause->Enabled = b_control;\r
+    ToolButtonSlow->Enabled = b_control;\r
+    ToolButtonFast->Enabled = b_control;\r
+    PopupBack->Enabled = false;\r
+    PopupPause->Enabled = b_control;\r
+    PopupSlow->Enabled = b_control;\r
+    PopupFast->Enabled = b_control;\r
+}\r
+\r
diff --git a/plugins/win32/mainframe.dfm b/plugins/win32/mainframe.dfm
new file mode 100644 (file)
index 0000000..20dcdef
--- /dev/null
@@ -0,0 +1,1244 @@
+object MainFrameDlg: TMainFrameDlg\r
+  Left = 304\r
+  Top = 278\r
+  Width = 535\r
+  Height = 272\r
+  Caption = 'VideoLAN Client (win32 interface)'\r
+  Color = clBtnFace\r
+  Font.Charset = DEFAULT_CHARSET\r
+  Font.Color = clWindowText\r
+  Font.Height = -11\r
+  Font.Name = 'MS Sans Serif'\r
+  Font.Style = []\r
+  Icon.Data = {\r
+    0000010001003030000001000800A80E00001600000028000000300000006000\r
+    00000100080000000000800A0000000000000000000000010000000000000402\r
+    04002486D4009CC2E4007CA6C400E4E2E40004528C003CA2F4001C82DC0054B2\r
+    FC003C8EDC00B4CADC00046EC4001C92F40034363400D4D6D400FFFFFF006CAA\r
+    E4006CB2F4000476DC0044AAFC009CD2FC00A4B6C4001C6EB4001C9AFC00548A\r
+    B4007CC2FC000486F400B4CAE4001416140034A2FC00CCD2D400147ACC006CBA\r
+    FC006CA6DC00CCE2F400045EA400349EFC00044A7400FCFEFC0064BAFC005C9E\r
+    DC00C4CED4000C92FC00BCD6E400F4F2F4007C9AB4008CCAFC0044A2FC007CBA\r
+    FC00CCEAFC001C5E8C000482EC0064B6FC000472D400047EEC002C9EFC00048E\r
+    FC001C1E1C001C96FC00CCDAE4000C0A0C00348ED400A4C6E4009CAEBC00248A\r
+    E4005CB6FC003492E400BCCEDC003C3E3C00047EE4004CAEFC00ACBECC00447A\r
+    A400249EFC008CC6FC003CA6FC00247ECC0074BEFC007CAEDC001C5674001496\r
+    FC00ECF6FC00649ACC00DCEEFC00040604002C8AD400A4C2E40084AAC400145A\r
+    8C0044A2F4001C86DC005CB2FC003C92DC00BCCADC000472CC003C3A3C00E4F2\r
+    FC0054AEFC0074B6F400047ADC004CAAFC009CB6CC00249AFC006C92BC0084C6\r
+    FC00048AFC001C1A1C003CA2FC00CCD2DC001C7ECC0074BAFC0074AADC00D4E6\r
+    F4000462B4000C4E74004C9EE400CCCED4001492FC00C4DAE40094CAFC0044A6\r
+    FC007CBEFC002C628C000476D4000C8EFC0024222400D4DAE4003476B400F4F6\r
+    FC006C9ECC00E4EEFC0000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000008383\r
+    8383838383838383838383838383838383838383838383838383838383838383\r
+    8383838383838383838383838383838383838383838383838383838383838383\r
+    8383838383838383838383838383838383838383838383838383838383838383\r
+    8383838383838383838383838383838383838383838383838383838383838383\r
+    8383838383838383838383838383838383838383838383838383838383838383\r
+    8383838383838383838383838383838383838383838383838383838383838383\r
+    8383838383838383838383838383838383838383838383838383838383838383\r
+    8383838383838383838383838383838383838383838383838383838383838383\r
+    838383831C1C1C1C838383838383838383838383838383838383838383838383\r
+    838383838383838383838383838383831C1C1C1C5E12635E1C1C1C8383838383\r
+    838383838383838383838383838383838383838383838383838383831C1C1C1C\r
+    5E6312456969691A455E1C1C1C83838383838383838383838383838383838383\r
+    8383838383838383831C1C1C5E127B5E7B63636363636345691A45125E1C1C83\r
+    8383838383838383838383838383838383838383831C1C1C1C5E126363635E05\r
+    25252525252572585E6345691A455E1C1C838383838383838383838383838383\r
+    8383831C1C5E1263451A697B05250569696969692A17244B584F7A5E69696963\r
+    5E1C83838383838383838383838383838383831C711A69694525252369696969\r
+    3869383875661D785B344D4825694569695E1C1C838383838383838383838383\r
+    838383831C5E45121C45696969383869386938383A376B645B206E795B250045\r
+    691A711C83838383838383838383838383838383831C1C231C63696938696938\r
+    6938692A17374B46412079796E520012455E1C83838383838383838383838383\r
+    838383838383831C1C1238386938386938693875661D1361344D7919101C230B\r
+    1C1C838383838383838383838383838383838383838383831C5E696938693869\r
+    38693850666B135B20797979211C1C1C83838383838383838383838383838383\r
+    83838383838383831C1C45693869383A17662413465B34342079796E521C8383\r
+    838383838383838383838383838383838383838383838383831C633A663A0602\r
+    0A2B22535382312E684A19101C83838383838383838383838383838383838383\r
+    8383838383838383831C01020A0A0A1E1E042C26262626606053146F54838383\r
+    838383838383838383838383838383838383838383838383831C67290E1E0E0E\r
+    0E042C2626262626262682656A83838383838383838383838383838383838383\r
+    8383838383838383831C0D3F0E0E0E0E0E042C262626262626267E4483838383\r
+    83838383838383838383838383838383838383838383838383836A3F0E0E0E6C\r
+    5D2B22538260602626266C7D8383838383838383838383838383838383838383\r
+    838383838383838383836A3F6C5D1B025924645B274D77536080477D83838383\r
+    83838383838383838383838383838383838383838383838383831C0302590C3A\r
+    753A376B465B6E4A141B0D838383838383838383838383838383838383838383\r
+    83838383838383838383541F0C3838382A661D4B61344D7930813C8383838383\r
+    8383838383838383838383838383838383838383838383838383831C45386938\r
+    75661D1308344D7910101C838383838383838383838383838383838383838383\r
+    83838383838383838383831C126938383A376B645B207979211C838383838383\r
+    8383838383838383838383838383838383838383838383838383831C6338692A\r
+    17374B463420796E521C83838383838383838383838383838383838383838383\r
+    83838383838383838383831C5E6938662F615B4D19681910101C838383838383\r
+    838383838383838383838383838383838383838383838383838383835407593E\r
+    5D2B70608253144E1C8383838383838383838383838383838383838383838383\r
+    8383838383838383838383831C030A1E0E042C26262682656A83838383838383\r
+    838383838383838383838383838383838383838383838383838383836A3F0E0E\r
+    0E042C2626267E446A8383838383838383838383838383838383838383838383\r
+    838383838383838383838383392D740E0E042C2626266C7D8383838383838383\r
+    838383838383838383838383838383838383838383838383838383831C0D156C\r
+    433B70606080477D838383838383838383838383838383838383838383838383\r
+    838383838383838383838383831C573E1134794A141B5F6A8383838383838383\r
+    83838383838383838383838383838383838383838383838383838383831C3D78\r
+    6461344D796F1C83838383838383838383838383838383838383838383838383\r
+    838383838383838383838383831C4C24645B347930521C838383838383838383\r
+    8383838383838383838383838383838383838383838383838383838383831C42\r
+    465B2079101C8383838383838383838383838383838383838383838383838383\r
+    83838383838383838383838383831C0946344D79211C83838383838383838383\r
+    8383838383838383838383838383838383838383838383838383838383831C3D\r
+    73731062521C8383838383838383838383838383838383838383838383838383\r
+    83838383838383838383838383831C7F0000001C1C8383838383838383838383\r
+    838383838383838383838383838383838383838383838383838383838383831C\r
+    0B074C4C1C838383838383838383838383838383838383838383838383838383\r
+    8383838383838383838383838383831C0B0701161C8383838383838383838383\r
+    8383838383838383838383838383838383838383838383838383838383838383\r
+    1C1C1C1C83838383838383838383838383838383838383838383838383838383\r
+    8383838383838383838383838383838383838383838383838383838383838383\r
+    8383838383838383838383838383838383838383838383838383838383838383\r
+    8383838383838383838383838383838383838383838383838383838383838383\r
+    8383838383838383838383838383838383838383838383838383838383838383\r
+    8383838383838383838383838383838383838383838383838383838383838383\r
+    838383838383838383838383838383838383838383838383838383838383FFFF\r
+    FFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFF\r
+    FFFFFFFF0000FFFFFC3FFFFF0000FFFFC007FFFF0000FFFC0001FFFF0000FFE0\r
+    00007FFF0000FE0000001FFF0000F80000000FFF0000F800000003FF0000FC00\r
+    000003FF0000FE00000007FF0000FF8000000FFF0000FFC000003FFF0000FFC0\r
+    0000FFFF0000FFE00001FFFF0000FFE00001FFFF0000FFE00001FFFF0000FFE0\r
+    0003FFFF0000FFF00003FFFF0000FFF00003FFFF0000FFF00007FFFF0000FFF0\r
+    0007FFFF0000FFF80007FFFF0000FFF8000FFFFF0000FFF8000FFFFF0000FFF8\r
+    000FFFFF0000FFFC001FFFFF0000FFFC001FFFFF0000FFFC001FFFFF0000FFFC\r
+    003FFFFF0000FFFC003FFFFF0000FFFE003FFFFF0000FFFE007FFFFF0000FFFE\r
+    007FFFFF0000FFFF00FFFFFF0000FFFF00FFFFFF0000FFFF00FFFFFF0000FFFF\r
+    01FFFFFF0000FFFF81FFFFFF0000FFFF81FFFFFF0000FFFFC3FFFFFF0000FFFF\r
+    FFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000}\r
+  Menu = MainMenu1\r
+  OldCreateOrder = False\r
+  PopupMenu = PopupMenuMain\r
+  ShowHint = True\r
+  OnClose = FormClose\r
+  PixelsPerInch = 96\r
+  TextHeight = 13\r
+  object ToolBar1: TToolBar\r
+    Left = 0\r
+    Top = 0\r
+    Width = 527\r
+    Height = 25\r
+    ButtonHeight = 21\r
+    ButtonWidth = 39\r
+    Caption = 'ToolBar1'\r
+    ShowCaptions = True\r
+    TabOrder = 0\r
+    object ToolButtonFile: TToolButton\r
+      Left = 0\r
+      Top = 2\r
+      Hint = 'Open a file'\r
+      Caption = 'File'\r
+      ImageIndex = 0\r
+      OnClick = ToolButtonFileClick\r
+    end\r
+    object ToolButtonDisc: TToolButton\r
+      Left = 39\r
+      Top = 2\r
+      Hint = 'Open a DVD or VCD'\r
+      Caption = 'Disc'\r
+      ImageIndex = 1\r
+      OnClick = ToolButtonDiscClick\r
+    end\r
+    object ToolButtonNet: TToolButton\r
+      Left = 78\r
+      Top = 2\r
+      Hint = 'Open a network stream'\r
+      Caption = 'Net'\r
+      ImageIndex = 2\r
+      OnClick = ToolButtonNetClick\r
+    end\r
+    object ToolButtonSep1: TToolButton\r
+      Left = 117\r
+      Top = 2\r
+      Width = 8\r
+      Caption = 'ToolButtonSep1'\r
+      ImageIndex = 3\r
+      Style = tbsSeparator\r
+    end\r
+    object ToolButtonBack: TToolButton\r
+      Left = 125\r
+      Top = 2\r
+      Caption = 'Back'\r
+      Enabled = False\r
+      ImageIndex = 3\r
+      OnClick = ToolButtonBackClick\r
+    end\r
+    object ToolButtonStop: TToolButton\r
+      Left = 164\r
+      Top = 2\r
+      Hint = 'Stop stream'\r
+      Caption = 'Stop'\r
+      Enabled = False\r
+      ImageIndex = 4\r
+      OnClick = ToolButtonStopClick\r
+    end\r
+    object ToolButtonEject: TToolButton\r
+      Left = 203\r
+      Top = 2\r
+      Hint = 'Eject disc'\r
+      Caption = 'Eject'\r
+      ImageIndex = 12\r
+      OnClick = ToolButtonEjectClick\r
+    end\r
+    object ToolButtonPlay: TToolButton\r
+      Left = 242\r
+      Top = 2\r
+      Hint = 'Play stream'\r
+      Caption = 'Play'\r
+      ImageIndex = 5\r
+      OnClick = ToolButtonPlayClick\r
+    end\r
+    object ToolButtonPause: TToolButton\r
+      Left = 281\r
+      Top = 2\r
+      Hint = 'Pause stream'\r
+      Caption = 'Pause'\r
+      Enabled = False\r
+      ImageIndex = 6\r
+      OnClick = ToolButtonPauseClick\r
+    end\r
+    object ToolButtonSlow: TToolButton\r
+      Left = 320\r
+      Top = 2\r
+      Hint = 'Play slower'\r
+      Caption = 'Slow'\r
+      Enabled = False\r
+      ImageIndex = 7\r
+      OnClick = ToolButtonSlowClick\r
+    end\r
+    object ToolButtonFast: TToolButton\r
+      Left = 359\r
+      Top = 2\r
+      Hint = 'Play faster'\r
+      Caption = 'Fast'\r
+      Enabled = False\r
+      ImageIndex = 8\r
+      OnClick = ToolButtonFastClick\r
+    end\r
+    object ToolButtonSep2: TToolButton\r
+      Left = 398\r
+      Top = 2\r
+      Width = 8\r
+      Caption = 'ToolButtonSep2'\r
+      ImageIndex = 9\r
+      Style = tbsSeparator\r
+    end\r
+    object ToolButtonPlaylist: TToolButton\r
+      Left = 406\r
+      Top = 2\r
+      Hint = 'Open playlist'\r
+      Caption = 'Playlist'\r
+      ImageIndex = 9\r
+      OnClick = ToolButtonPlaylistClick\r
+    end\r
+    object ToolButtonPrev: TToolButton\r
+      Left = 445\r
+      Top = 2\r
+      Hint = 'Previous file'\r
+      Caption = 'Prev'\r
+      ImageIndex = 10\r
+      OnClick = ToolButtonPrevClick\r
+    end\r
+    object ToolButtonNext: TToolButton\r
+      Left = 484\r
+      Top = 2\r
+      Hint = 'Next file'\r
+      Caption = 'Next'\r
+      ImageIndex = 11\r
+      OnClick = ToolButtonNextClick\r
+    end\r
+  end\r
+  object StatusBar: TStatusBar\r
+    Left = 0\r
+    Top = 207\r
+    Width = 527\r
+    Height = 19\r
+    Panels = <>\r
+    ParentShowHint = False\r
+    ShowHint = False\r
+    SimplePanel = True\r
+  end\r
+  object GroupBoxFile: TGroupBox\r
+    Left = 0\r
+    Top = 65\r
+    Width = 527\r
+    Height = 32\r
+    Align = alTop\r
+    TabOrder = 2\r
+    Visible = False\r
+    object LabelFileName: TLabel\r
+      Left = 2\r
+      Top = 15\r
+      Width = 523\r
+      Height = 15\r
+      Align = alClient\r
+      Alignment = taCenter\r
+      Caption = 'File read'\r
+    end\r
+  end\r
+  object GroupBoxNetwork: TGroupBox\r
+    Left = 0\r
+    Top = 129\r
+    Width = 527\r
+    Height = 40\r
+    Align = alTop\r
+    TabOrder = 3\r
+    Visible = False\r
+    object LabelChannel: TLabel\r
+      Left = 288\r
+      Top = 16\r
+      Width = 42\r
+      Height = 13\r
+      Caption = 'Channel:'\r
+    end\r
+    object LabelServer: TLabel\r
+      Left = 64\r
+      Top = 16\r
+      Width = 52\r
+      Height = 13\r
+      Caption = 'No server !'\r
+    end\r
+    object EditChannel: TEdit\r
+      Left = 336\r
+      Top = 12\r
+      Width = 17\r
+      Height = 21\r
+      TabOrder = 0\r
+      Text = '0'\r
+    end\r
+    object UpDownChannel: TUpDown\r
+      Left = 353\r
+      Top = 12\r
+      Width = 15\r
+      Height = 21\r
+      Associate = EditChannel\r
+      Min = 0\r
+      Position = 0\r
+      TabOrder = 1\r
+      Thousands = False\r
+      Wrap = False\r
+    end\r
+    object ButtonGo: TButton\r
+      Left = 376\r
+      Top = 10\r
+      Width = 25\r
+      Height = 25\r
+      Caption = 'Go!'\r
+      TabOrder = 2\r
+      OnClick = ButtonGoClick\r
+    end\r
+  end\r
+  object GroupBoxDisc: TGroupBox\r
+    Left = 0\r
+    Top = 97\r
+    Width = 527\r
+    Height = 32\r
+    Align = alTop\r
+    TabOrder = 4\r
+    Visible = False\r
+    object LabelDisc: TLabel\r
+      Left = 32\r
+      Top = 11\r
+      Width = 21\r
+      Height = 13\r
+      Caption = 'Disc'\r
+    end\r
+    object LabelTitle: TLabel\r
+      Left = 96\r
+      Top = 11\r
+      Width = 23\r
+      Height = 13\r
+      Caption = 'Title:'\r
+    end\r
+    object LabelChapter: TLabel\r
+      Left = 296\r
+      Top = 11\r
+      Width = 40\r
+      Height = 13\r
+      Caption = 'Chapter:'\r
+    end\r
+    object LabelTitleCurrent: TLabel\r
+      Left = 126\r
+      Top = 11\r
+      Width = 9\r
+      Height = 13\r
+      Caption = '---'\r
+    end\r
+    object LabelChapterCurrent: TLabel\r
+      Left = 342\r
+      Top = 11\r
+      Width = 9\r
+      Height = 13\r
+      Caption = '---'\r
+    end\r
+    object ButtonTitlePrev: TButton\r
+      Left = 152\r
+      Top = 8\r
+      Width = 33\r
+      Height = 19\r
+      Hint = 'Jump to previous title'\r
+      Caption = 'Prev'\r
+      TabOrder = 0\r
+      OnClick = ButtonTitlePrevClick\r
+    end\r
+    object ButtonTitleNext: TButton\r
+      Left = 184\r
+      Top = 8\r
+      Width = 33\r
+      Height = 19\r
+      Hint = 'Jump to next title'\r
+      Caption = 'Next'\r
+      TabOrder = 1\r
+      OnClick = ButtonTitleNextClick\r
+    end\r
+    object ButtonChapterPrev: TButton\r
+      Left = 368\r
+      Top = 8\r
+      Width = 33\r
+      Height = 19\r
+      Hint = 'Jump to previous chapter'\r
+      Caption = 'Prev'\r
+      TabOrder = 2\r
+      OnClick = ButtonChapterPrevClick\r
+    end\r
+    object ButtonChapterNext: TButton\r
+      Left = 400\r
+      Top = 8\r
+      Width = 33\r
+      Height = 19\r
+      Hint = 'Jump to next chapter'\r
+      Caption = 'Next'\r
+      TabOrder = 3\r
+      OnClick = ButtonChapterNextClick\r
+    end\r
+  end\r
+  object GroupBoxSlider: TGroupBox\r
+    Left = 0\r
+    Top = 25\r
+    Width = 527\r
+    Height = 40\r
+    Align = alTop\r
+    Caption = '0:00:00'\r
+    TabOrder = 5\r
+    Visible = False\r
+    object TrackBar: TTrackBar\r
+      Left = 2\r
+      Top = 15\r
+      Width = 523\r
+      Height = 21\r
+      Align = alTop\r
+      Orientation = trHorizontal\r
+      Frequency = 1\r
+      Position = 0\r
+      SelEnd = 0\r
+      SelStart = 0\r
+      TabOrder = 0\r
+      TickMarks = tmBottomRight\r
+      TickStyle = tsNone\r
+      OnChange = TrackBarChange\r
+    end\r
+  end\r
+  object MainMenu1: TMainMenu\r
+    Left = 40\r
+    Top = 176\r
+    object MenuFile: TMenuItem\r
+      Caption = '&File'\r
+      object MenuOpenFile: TMenuItem\r
+        Caption = '&Open file...'\r
+        Hint = 'Open a file'\r
+        ShortCut = 114\r
+        OnClick = MenuOpenFileClick\r
+      end\r
+      object MenuOpenDisc: TMenuItem\r
+        Caption = 'Open &disc...'\r
+        Hint = 'Open a DVD or VCD'\r
+        ShortCut = 115\r
+        OnClick = MenuOpenDiscClick\r
+      end\r
+      object MenuNetworkStream: TMenuItem\r
+        Caption = '&Network stream...'\r
+        Hint = 'Select a network stream'\r
+        ShortCut = 116\r
+        OnClick = MenuNetworkStreamClick\r
+      end\r
+      object N8: TMenuItem\r
+        Caption = '-'\r
+        Visible = False\r
+      end\r
+      object MenuEjectDisc: TMenuItem\r
+        Caption = '&Eject Disc'\r
+        Hint = 'Eject disc'\r
+        Visible = False\r
+      end\r
+      object N1: TMenuItem\r
+        Caption = '-'\r
+      end\r
+      object MenuExit: TMenuItem\r
+        Caption = 'E&xit'\r
+        Hint = 'Exit the program'\r
+        ShortCut = 16465\r
+        OnClick = MenuExitClick\r
+      end\r
+    end\r
+    object MenuView: TMenuItem\r
+      Caption = '&View'\r
+      object MenuHideinterface: TMenuItem\r
+        Caption = '&Hide interface'\r
+        Hint = 'Hide the main interface window'\r
+      end\r
+      object MenuFullscreen: TMenuItem\r
+        Caption = '&Fullscreen'\r
+        Hint = 'Toggle fullscreen'\r
+        OnClick = MenuFullscreenClick\r
+      end\r
+      object N2: TMenuItem\r
+        Caption = '-'\r
+      end\r
+      object MenuProgram: TMenuItem\r
+        Caption = 'Progr&am'\r
+        Enabled = False\r
+        Hint = 'Select program'\r
+      end\r
+      object MenuTitle: TMenuItem\r
+        Caption = '&Title'\r
+        Enabled = False\r
+        Hint = 'Select title'\r
+      end\r
+      object MenuChapter: TMenuItem\r
+        Caption = '&Chapter'\r
+        Enabled = False\r
+        Hint = 'Select chapter'\r
+      end\r
+      object MenuAngle: TMenuItem\r
+        Caption = 'An&gle'\r
+        Enabled = False\r
+        Hint = 'Select angle'\r
+      end\r
+      object N3: TMenuItem\r
+        Caption = '-'\r
+      end\r
+      object MenuPlaylist: TMenuItem\r
+        Caption = '&Playlist...'\r
+        Hint = 'Open the playlist window'\r
+        OnClick = MenuPlaylistClick\r
+      end\r
+      object MenuModules: TMenuItem\r
+        Caption = '&Modules...'\r
+        Enabled = False\r
+        Hint = 'Open the modules window'\r
+      end\r
+      object MenuMessages: TMenuItem\r
+        Caption = 'Me&ssages...'\r
+        Hint = 'Open the messages window'\r
+        OnClick = MenuMessagesClick\r
+      end\r
+    end\r
+    object MenuSettings: TMenuItem\r
+      Caption = '&Settings'\r
+      object MenuAudio: TMenuItem\r
+        Caption = '&Audio'\r
+        Enabled = False\r
+        Hint = 'Select audio language'\r
+      end\r
+      object MenuSubtitles: TMenuItem\r
+        Caption = '&Subtitles'\r
+        Enabled = False\r
+        Hint = 'Select subtitles language'\r
+      end\r
+      object N4: TMenuItem\r
+        Caption = '-'\r
+      end\r
+      object MenuPreferences: TMenuItem\r
+        Caption = '&Preferences...'\r
+        Hint = 'Configure the application'\r
+        OnClick = MenuPreferencesClick\r
+      end\r
+    end\r
+    object MenuHelp: TMenuItem\r
+      Caption = '&Help'\r
+      object MenuAbout: TMenuItem\r
+        Caption = '&About...'\r
+        Hint = 'About this application'\r
+        OnClick = MenuAboutClick\r
+      end\r
+    end\r
+  end\r
+  object OpenDialog1: TOpenDialog\r
+    Filter = 'All Files (*.*)|*.*'\r
+    Left = 8\r
+    Top = 176\r
+  end\r
+  object ImageListToolbar: TImageList\r
+    Height = 32\r
+    Width = 32\r
+    Left = 104\r
+    Top = 176\r
+    Bitmap = {\r
+      494C010102000400040020002000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600\r
+      0000000000003600000028000000800000002000000001002000000000000040\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      000000000000000000000000000000000000000000000000E7000000E700FF00\r
+      00008400000084000000840000000000000000000000FF00E700FF00E700FF00\r
+      E700FF00E7000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000FF00E700FF00\r
+      E70000000000000000000000000000000000000000000000000000000000FF00\r
+      0000FF00E700FF00E70000000000000000000000000000000000000000000000\r
+      000000000000000000000000000000000000FF00E700FF00E700FF00E700FF00\r
+      E700FF00E700FF00E700FF00E700FF00E7000000000000000000000000008400\r
+      0000000000008400000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      000000000000000000000000000000000000000000000000E70084000000FF00\r
+      0000840000008400000000000000FF00E700FF00E700FF00E700FF00E7000000\r
+      E7000000E7000000000000000000000000000000000000000000000000000000\r
+      00000000000000000000000000000000000000000000FF00E700FF00E7000000\r
+      0000FF00E7000000000000000000000000000000000000000000FF000000FF00\r
+      E700FF00E7000000E700FF00E700000000000000000000000000000000000000\r
+      000000000000000000000000000000000000FF00E700FF00E700FF00E700FF00\r
+      E700FF00E700FF00E700FF00E700FF00E7000000000000000000840000000000\r
+      0000840000000000000084000000840000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      000000000000000000000000000000000000000000000000E700FF0000008400\r
+      0000840000000000000000000000FF00E7000000E7000000E7000000E7000000\r
+      E7000000E7000000E70000000000000000000000000000000000000000000000\r
+      000000000000000000000000000000000000FF00E700FF00E70000000000FF00\r
+      E700000000000000000000000000000000000000000000000000FF000000FF00\r
+      E7000000E7000000E7000000E700FF00E7000000000000000000000000000000\r
+      000000000000000000000000000000000000FF00E700FF00E700FF00E700FF00\r
+      E700FF00E700FF00E700FF00E700FF00E7000000000000000000000000008400\r
+      0000000000008400000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000008400000084000000FF0000008400\r
+      000000000000FF00E7000000E7000000E7000000E7000000E7000000E7000000\r
+      E7000000E7000000E70000000000000000000000000000000000000000000000\r
+      000000000000000000000000000000000000FF00E70000000000FF00E7000000\r
+      0000FF00E70000000000FF00E700FF00E700FF00E700FF00E700FF00E7000000\r
+      E7000000E7000000E70000000000FF00E7000000000000000000000000000000\r
+      000000000000000000000000000000000000FF00E700FF00E70042004200AD00\r
+      2100EF006300FF008400C60021004200A5000000000000000000840000000000\r
+      0000840000000000000084000000840000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000840000008400\r
+      00000000E7000000E7000000E7000000E7000000E7000000E700000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000FF00E7000000000000000000000000000000\r
+      000000000000FF00E700840000000000000000000000840000000000E7000000\r
+      E70000000000000000000000000000000000FF00E70000000000000000000000\r
+      000000000000000000000000000000000000C6000000C6000000C6000000C600\r
+      0000C6000000C6000000C6000000C60000000000000000000000840000008400\r
+      0000840000008400000084000000840000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000940042000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      00000000000000000000310063000000000000000000D600C60000000000D600\r
+      C6004200C6000800210021002100000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      000000000000FF00E700FF00E700FF00E700FF00E700FF00E700FF00E7000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      00000000000000000000000000000000000000000000DE00E700DE00E700DE00\r
+      E7007B00420008008400DE00E700DE00E7007B004200B5008400DE00E700A500\r
+      21007B00420018008400000000000000000000000000DE00E700000000000000\r
+      0000000063000000000018004200100084008400420039002100180063006300\r
+      8400000000000000000021008400DE0084000000000000000000000000000000\r
+      000000000000210000000000000052006300000000008400420073000000F700\r
+      8400000000000000000000000000FF00E700000000007B004200290000000000\r
+      0000FF00E700000000008400420073000000E70042007300E7006300C6000000\r
+      E700000084007300E700080084002100C6000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      000000000000000000000000000000000000000000000000000000000000FF00\r
+      E700FF00E7000000000000000000000000000000000000000000FF000000FF00\r
+      E700FF00E7000000000000000000000000000000000000000000000000000000\r
+      000000000000000000000000000000000000FF00E700FF00E700FF00E700FF00\r
+      E700FF00E700FF00E700FF00E700FF00E700FF00E700FF00E700FF00E700FF00\r
+      E700FF00E700FF00E700FF00E700FF00E700CE00A5000000000000000000F700\r
+      E700FF00E700D600E7005A0063000000000000000000DE00E700390063000000\r
+      0000D600E70000000000000000004200E7004A00210052004200630084007300\r
+      63007300A500E700A500BD0084008C000000FF00E7005A0021000000C600E700\r
+      00009C00840042000000080000000000000000000000000000005200E700B500\r
+      42000000C600BD008400BD008400CE00E70008000000000000009C00E700C600\r
+      E700000000006300E700000000008C00E7000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000FF00E700FF00\r
+      E70000000000000000000000000000000000000000000000000000000000FF00\r
+      0000FF00E700FF00E70000000000000000000000000000000000000000000000\r
+      000000000000000000000000000000000000FF00E700FF00E700FF00E700FF00\r
+      E700FF00E700FF00E700FF00E700FF00E700FF00E700FF00E700FF00E700FF00\r
+      E700FF00E700FF00E700FF00E700FF00E700FF00E700FF00E700FF00E700FF00\r
+      E700FF00E700FF00E700FF00E700FF00E700FF00E700FF00E700FF00E700FF00\r
+      E700FF00E700FF00E700FF00E700FF00E700FF00E700FF00E700FF00E700FF00\r
+      E700FF00E700FF00E700FF00E700FF00E700FF00E700FF00E700FF00E700FF00\r
+      E700FF00E700FF00E700FF00E700FF00E700FF00E700FF00E700FF00E700FF00\r
+      E700FF00E700FF00E700FF00E700FF00E700FF00E700FF00E700FF00E700FF00\r
+      E700FF00E700FF00E700FF00E700FF00E7000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      00000000000000000000000000000000000000000000FF00E700FF00E7000000\r
+      0000FF00E7000000000000000000000000000000000000000000FF000000FF00\r
+      E700FF00E7000000E700FF00E700000000000000000000000000000000000000\r
+      000000000000000000000000000000000000FF00E700FF00E700FF000000FF00\r
+      E700FF00E7000000000000000000FF00E700FF00E700FF00E700FF00E700FF00\r
+      E700FF00E700FF00E700FF00E700FF00E700FF00E700FF00E700FF00E700FF00\r
+      E700FF00E700FF00E700FF00E700FF00E700FF00E700FF00E700FF00E7000000\r
+      000000000000FF00E700FF00E700FF00E700FF00E700FF00E700FF00E7000000\r
+      000000000000FF00E700FF00E700FF00E700FF00E700FF00E700FF00E700FF00\r
+      E700FF00E700FF00E700FF00E700FF00E700FF00E700FF00E700FF00E700FF00\r
+      E700FF00E700FF00E700FF00E700FF00E700FF00E700FF00E700FF00E700FF00\r
+      E700FF00E7000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      000000000000000000000000000000000000FF00E700FF00E70000000000FF00\r
+      E700000000000000000000000000000000000000000000000000FF000000FF00\r
+      E7000000E7000000E7000000E700FF00E7000000000000000000000000000000\r
+      000000000000000000000000000000000000FF00E700FF00E700FF00E7000000\r
+      E7000000E7000000E70000000000FF00E70000000000FF00E700FF00E700FF00\r
+      E700FF00E700FF00E700FF00E700FF00E700FF00E700FF00E700FF00E700FF00\r
+      E700FF00E700FF00E700FF00E70000000000FF00E700FF00E700FF00E700FF00\r
+      E700FF00E700FF00E700FF00E700FF00E700FF00E700FF00E700FF000000FF00\r
+      E7000000E7000000E7000000E700FF00E70000000000FF00E700FF00E700FF00\r
+      E700FF00E700FF00E700FF00E700FF00E700FF00E700FF00E700FF00E700FF00\r
+      E700FF00E700FF00E700FF00E700FF00E70000000000FF00E700FF00E700FF00\r
+      E700FF00E700FF00E700FF00E700FF00E7000000000000000000000000000000\r
+      000000000000000000000000000000000000000000000000E700000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      000000000000000000000000000000000000FF00E70000000000FF00E7000000\r
+      0000FF00E70000000000FF00E700FF00E700FF00E700FF00E700FF00E7000000\r
+      E7000000E7000000E70000000000FF00E7000000000000000000000000000000\r
+      000000000000000000000000000000000000FF00E700FF00E70000000000FF00\r
+      E700FF00E700FF00E700FF00E700FF00E700FF00E70000000000FF00E700FF00\r
+      E700FF00E700FF00E700FF00E700FF00E700FF00E700FF00E700FF00E700FF00\r
+      E700FF00E700FF00E70000000000FF00E700FF00E700FF00E700FF00E700FF00\r
+      E700FF00E70000000000FF00E700FF00E700FF00E700FF00E70000000000FF00\r
+      E700FF00E700FF00E700FF00E700FF00E700FF00E70000000000FF00E700FF00\r
+      E700FF00E700FF00E700FF00E700FF00E700FF00E700FF00E700FF00E700FF00\r
+      E700FF00E700FF00E70000000000FF00E700FF00E700FF00E700FF00E700FF00\r
+      E700FF00E7008400000000000000FF00E7000000000000000000000000000000\r
+      00000000000000000000000000000000000000000000FF00E7000000E700FF00\r
+      E700000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000FF00E7000000000000000000000000000000\r
+      000000000000FF00E700840000000000000000000000840000000000E7000000\r
+      E70000000000000000000000000000000000FF00E70000000000000000000000\r
+      000000000000000000000000000000000000840000000000000000000000FF00\r
+      E700FF00E700FF00E700FF00E700000000008400000000000000840000000000\r
+      0000840000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000FF00E700FF00\r
+      E700FF0000000000000000000000000000000000000000000000000000000000\r
+      0000FF00E700FF00E70000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000FF00E700FF00\r
+      C600FF000000FF00C600FF00C600FF0042000000000000000000000000000000\r
+      0000000000000000000000000000840000000000000000000000000000000000\r
+      000000000000000000000000000000000000000000000000E700FF00E7000000\r
+      E700000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000FF00E7000000000000000000000000000000\r
+      0000FF00E7008400000000000000FF00E700FF00E7000000000084000000FF00\r
+      E70000000000000000000000000000000000FF00E70000000000000000000000\r
+      0000000000000000000000000000000000008400000000000000000000000000\r
+      0000FF00E700FF00E700FF00E700000000000000000084000000000000008400\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      000000000000000000000000000000000000000000000000000000000000FF00\r
+      E700FF00E700FF0000000000000000000000000000000000000000000000FF00\r
+      E700FF00E7000000000000000000000000000000000000000000000000000000\r
+      00000000000000000000000000000000000000000000FF00E700FF00E700FF00\r
+      E700FF00E700FF00E700FF00E700840000000000000000000000000000000000\r
+      0000000000000000000084000000840000000000000000000000000000000000\r
+      00000000000000000000000000000000000000000000FF00E7000000E700FF00\r
+      E7000000E7000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000FF00E7000000000000000000000000000000\r
+      0000FF00E70000000000FF00E7000000000000000000FF00E70000000000FF00\r
+      E70000000000000000000000000000000000FF00E70000000000000000000000\r
+      0000000000000000000000000000000000008400000000000000000000000000\r
+      0000FF00E70000000000FF00E700FF00E700FF00E70000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      000000000000FF00E700FF00E700FF00E700FF00E700FF00E700FF00E7000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      000000000000000000000000000000000000FF00E700FF00E700FF00E700FF00\r
+      E700FF00E700FF00E700FF00E700840000000000000000000000000000000000\r
+      0000000000000000000000000000840000000000000000000000000000000000\r
+      000000000000000000000000000000000000000000000000E700FF00E7000000\r
+      E700FF00E7000000E700FF00E7000000E700FF00E7000000E700000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000FF00E7000000000000000000000000000000\r
+      0000FF00E70000000000FF00E7000000000000000000FF00E70000000000FF00\r
+      E70000000000000000000000000000000000FF00E70000000000000000000000\r
+      0000000000000000000000000000000000008400000000000000000000000000\r
+      000000000000FF00E700FF00E700FF00E700FF00E700FF00E700000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      00000000000000000000000000000000000084000000FF00E700FF00E700FF00\r
+      E700FF00E700FF00E700FF00E700840000000000000000000000000000000000\r
+      0000000000000000000000000000840000000000000000000000000000000000\r
+      00000000000000000000000000000000000000000000FF00E7000000E700FF00\r
+      E7000000E700FF00E7000000E700FF00E7000000E700FF00E700000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000FF00E7000000000000000000000000000000\r
+      0000FF00E7008400000000000000FF00E700FF00E7000000000084000000FF00\r
+      E70000000000000000000000000000000000FF00E70000000000000000000000\r
+      0000000000000000000000000000000000008400000000000000000000000000\r
+      0000FF00E70000000000FF00E700FF00E700FF00E70000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000008400000084000000840000008400\r
+      00008400000000000000FF00E700FF00E7000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      000000000000000000000000000000000000000000000000E700FF00E7000000\r
+      E700000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000FF00E7000000000000000000000000000000\r
+      00000000E7000000E70084000000000000000000000084000000FF00E7000000\r
+      000000000000000000000000000000000000FF00E70000000000000000000000\r
+      0000000000000000000000000000000000008400000000000000000000000000\r
+      000000000000FF00E70000000000FF00E7000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000E7000000E700FF00E700FF00\r
+      E70084000000FF00000084000000840000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      000000000000000000000000000000000000FF00E700000000000000E7000000\r
+      E7000000E700FF00E700FF00E700FF00E700FF00E700FF00E70000000000FF00\r
+      E70000000000FF00E70000000000FF00E7000000000000000000000000000000\r
+      0000000000000000000000000000000000008400000000000000000000000000\r
+      0000FF00E7000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      000000000000000000000000000000000000840000008400000084000000FF00\r
+      0000840000000000E7000000E700000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      000000000000000000000000000000000000FF00E7000000E7000000E7000000\r
+      E700FF00E700FF00000000000000000000000000000000000000000000000000\r
+      0000FF00E70000000000FF00E700FF00E7000000000000000000000000000000\r
+      0000000000000000000000000000000000008400000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000B50000000000\r
+      0000000000000000E70000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      00000000000000000000000000000000000000000000FF00E7000000E700FF00\r
+      E700FF00E700FF0000000000000000000000000000000000000000000000FF00\r
+      E70000000000FF00E700FF00E700000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000084000000000000008400\r
+      00000000000000000000000000000000000000000000FF000000FF000000FF00\r
+      0000FF000000FF00000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000FF00E7000000000000000000000000000000\r
+      0000FF00E7008400000000000000FF00E700FF00E7000000000084000000FF00\r
+      E70000000000000000000000000000000000FF00E70000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      000000000000000000000000000000000000000000000000000084000000FF00\r
+      000084000000FF00000084000000840000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000FF00E700FF00\r
+      E700FF0000000000000000000000000000000000000000000000000000000000\r
+      0000FF00E700FF00E70000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000008400\r
+      000084000000FF0000008400000084000000FF00000084000000FF0000008400\r
+      0000FF0000008400000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000FF00E7000000000000000000000000000000\r
+      0000FF00E70000000000FF00E7000000000000000000FF00E70000000000FF00\r
+      E70000000000000000000000000000000000FF00E70000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000FF000000FF00\r
+      0000FF000000FF000000FF000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      000000000000000000000000000000000000000000000000000000000000FF00\r
+      E700FF00E700FF0000000000000000000000000000000000000000000000FF00\r
+      E700FF00E7000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000008400\r
+      0000840000008400000084000000840000008400000084000000840000008400\r
+      0000840000008400000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000FF00E7000000000000000000000000000000\r
+      0000FF00E70000000000FF00E7000000000000000000FF00E70000000000FF00\r
+      E70000000000000000000000000000000000FF00E70000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      000000000000000000000000E7000000E7000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      000000000000FF00E700FF00E700FF00E700FF00E700FF00E700FF00E7000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000084000000000000008400\r
+      0000840000000000000084000000840000000000000084000000000000008400\r
+      0000000000008400000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000FF00E7000000000000000000000000000000\r
+      0000FF00E7008400000000000000FF00E700FF00E7000000000084000000FF00\r
+      E70000000000000000000000000000000000FF00E70000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      00000000000000000000000000000000000000000000000000000000E7000000\r
+      E7000000E7000000E7000000E7000000E7000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000840000008400\r
+      0000000000008400000000000000000000008400000000000000840000000000\r
+      0000840000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000FF00E7000000000000000000000000000000\r
+      00000000E7000000E70084000000000000000000000084000000FF00E7000000\r
+      000000000000000000000000000000000000FF00E70000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      00000000000000000000000000000000000000000000000000000000E7000000\r
+      E7000000E7000000E7000000E700FF00E7000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      000000000000000000000000000000000000840000008400000084000000FF00\r
+      E700000000000000000084000000840000000000000084000000000000008400\r
+      0000000000008400000000000000000000000000000000000000000000000000\r
+      000000000000000000000000000000000000FF00E700000000000000E7000000\r
+      E7000000E700FF00E700FF00E700FF00E700FF00E700FF00E70000000000FF00\r
+      E70000000000FF00E70000000000FF00E7000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      E7000000E700FF00E700FF00E700FF00E7000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      000000000000000000000000000000000000840000000000000000000000FF00\r
+      E700FF00E7000000000000000000000000008400000000000000840000000000\r
+      0000840000000000000000000000000000000000000000000000000000000000\r
+      000000000000000000000000000000000000FF00E7000000E7000000E7000000\r
+      E700FF00E700FF00000000000000000000000000000000000000000000000000\r
+      0000FF00E70000000000FF00E700FF00E7000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      000000000000000000000000000000000000000000000000000000000000FF00\r
+      E700FF00E700FF00E700FF00E700000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000008400000000000000FF00E7000000\r
+      0000FF00E700FF00E70000000000840000000000000084000000000000008400\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      00000000000000000000000000000000000000000000FF00E7000000E700FF00\r
+      E700FF00E700FF0000000000000000000000000000000000000000000000FF00\r
+      E70000000000FF00E700FF00E700000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000FF00E7000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      000000000000000000000000000000000000FF00E7000000000084000000FF00\r
+      E700FF00E700FF00E700FF00E700FF00E700FF00E70000000000FF00E700FF00\r
+      E700FF00E700FF00E700FF00E700FF00E700FF00E700FF00E700FF00E700FF00\r
+      E700FF00E700FF00E70000000000FF00E700FF00E700FF00E700FF00E700FF00\r
+      E700FF00E70000000000FF00E700FF00E700FF00E700FF00E70000000000FF00\r
+      E700FF00E700FF00E700FF00E700FF00E700FF00E70000000000FF00E700FF00\r
+      E700FF00E700FF00E700FF00E700FF00E700FF00E700FF00E700FF00E700FF00\r
+      E700FF00E700FF00E70000000000FF00E700FF00E700FF00E700FF00E700FF00\r
+      E700FF00E70000000000FF00E700FF00E7000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      000000000000000000000000000000000000FF00E700FF00E700FF00E700FF00\r
+      E700FF00E700FF00E700FF00E70000000000FF00E700FF00E700FF00E700FF00\r
+      E700FF00E700FF00E700FF00E700FF00E700FF00E700FF00E700FF00E700FF00\r
+      E700FF00E700FF00E700FF00E70000000000FF00E7000000E7000000E7000000\r
+      E700FF00E700FF000000FF00E700FF00E700FF00E700FF00E700FF00E700FF00\r
+      E700FF00E700FF00E700FF00E700FF00E70000000000FF00E700FF00E700FF00\r
+      E700FF00E700FF00E700FF00E700FF00E700FF00E700FF00E700FF00E700FF00\r
+      E700FF00E700FF00E700FF00E70000000000FF00E700000000000000E7000000\r
+      E7000000E700FF00E700FF00E700FF00E7000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      0000000000000000000000000000000000000000000000000000000000000000\r
+      000000000000000000000000000000000000000000000000000000000000FF00\r
+      E700FF00E700FF00E700FF00E700FF00E700FF00E700FF00E700FF00E700FF00\r
+      E700FF00E700FF00E700FF00E700FF00E700FF00E700FF00E700FF00E700FF00\r
+      E700FF00E700FF00E700FF00E700FF00E700FF00E700FF00E700FF00E7000000\r
+      000000000000FF00E700FF00E700FF00E700FF00E700FF00E700FF00E7000000\r
+      000000000000FF00E700FF00E700FF00E700FF00E700FF00E700FF00E700FF00\r
+      E700FF00E700FF00E700FF00E700FF00E700FF00E700FF00E700FF00E700FF00\r
+      E700FF00E700FF00E700FF00E700FF00E700FF00E7000000000000000000FF00\r
+      E700FF00E700FF000000FF00E700FF00E700424D3E000000000000003E000000\r
+      2800000080000000200000000100010000000000000200000000000000000000\r
+      000000000000000000000000FFFFFF00FFFFFFFFFFFFFFFFFFFFFF00FFFFFF00\r
+      FFFFFFFFFFFFFFFFFFFFFF00FFFFFF00FFFFFFFFFFFFFFFFFFFFFF00FFFFFF00\r
+      FFFFFFFFFFFFFFFFFFFFFF00FFFFFF00FFFFFFFFFFFFFFFFFFFFFF00FFFFFF00\r
+      FFFFFFFFFFFFFFFFFFFFFF00FFFFFF00FFFFFFFFFFF81FFFFFFFFF00FFFFFF00\r
+      FFFFFFFFFFE007FFFFFFFF00FFFFFF00FFFFFFFFFF87C1FFFFFFFF00FFFFFF00\r
+      FFFFFFFFFF4FE2FFFFFFFF00FFFFFF00FF001FFFFF17C0FFFFFFFF00FFFFFF00\r
+      FF000FFFFE2FC07FFFFFFF00FFFFFF00FF0007FFFE54007FFFFFFF00FFFFFF00\r
+      FF0003FFFCF8023FFFFFFF00FFFFFF00FF0001FFFCF00F3FFFFFFF00FFFFFF00\r
+      FF0000FFFCF18F3FFFFFFF00FFFFFF00FF001FFFFCF18F3FFFFFFF00FFFFFF00\r
+      FF001FFFFCF00F3FFFFFFF00FFFFFF00FF001FFFFC401F3FFFFFFF00FFFFFF00\r
+      FF8FF1FFFE002A7FFFFFFF00FFFFFF00FFFFF9FFFE03F47FFFFFFF00FFFFFF00\r
+      FFFF75FFFF03E8FFFFFFFF00FFFFFF00FFFF8FFFFF47F2FFFFFFFF00FFFFFF00\r
+      FFFFFFFFFF83E1FFFFFFFF00FFFFFF00FFFFFFFFFFE007FFFFFFFF00FFFFFF00\r
+      FFFFFFFFFFF81FFFFFFFFF00FFFFFF00FFFFFFFFFFFFFFFFFFFFFF00FFFFFF00\r
+      FFFFFFFFFFFFFFFFFFFFFF00FFFFFF00FFFFFFFFFFFFFFFFFFFFFF00FFFFFF00\r
+      FFFFFFFFFFFFFFFFFFFFFF00FFFFFF00FFFFFFFFFFFFFFFFFFFFFF00FFFFFF00\r
+      FFFFFFFFFFFFFFFF00000000FFFFFF0000000000000000000000000000000000\r
+      000000000000}\r
+  end\r
+  object PopupMenuMain: TPopupMenu\r
+    AutoPopup = False\r
+    Left = 72\r
+    Top = 176\r
+    object PopupClose: TMenuItem\r
+      Caption = '&Close this popup'\r
+      OnClick = PopupCloseClick\r
+    end\r
+    object N9: TMenuItem\r
+      Caption = '-'\r
+    end\r
+    object PopupPlay: TMenuItem\r
+      Caption = '&Play'\r
+      OnClick = PopupPlayClick\r
+    end\r
+    object PopupPause: TMenuItem\r
+      Caption = 'Pause'\r
+      OnClick = PopupPauseClick\r
+    end\r
+    object PopupStop: TMenuItem\r
+      Caption = 'Stop'\r
+      OnClick = PopupStopClick\r
+    end\r
+    object PopupBack: TMenuItem\r
+      Caption = 'Back'\r
+      OnClick = PopupBackClick\r
+    end\r
+    object PopupSlow: TMenuItem\r
+      Caption = 'Slow'\r
+      OnClick = PopupSlowClick\r
+    end\r
+    object PopupFast: TMenuItem\r
+      Caption = 'Fast'\r
+      OnClick = PopupFastClick\r
+    end\r
+    object N5: TMenuItem\r
+      Caption = '-'\r
+    end\r
+    object PopupToggleInterface: TMenuItem\r
+      Caption = 'Toggle &Interface'\r
+      OnClick = PopupToggleInterfaceClick\r
+    end\r
+    object PopupFullscreen: TMenuItem\r
+      Caption = '&Fullscreen'\r
+      OnClick = PopupFullscreenClick\r
+    end\r
+    object N6: TMenuItem\r
+      Caption = '-'\r
+    end\r
+    object PopupNext: TMenuItem\r
+      Caption = 'Next'\r
+      OnClick = PopupNextClick\r
+    end\r
+    object PopupPrev: TMenuItem\r
+      Caption = 'Prev'\r
+      OnClick = PopupPrevClick\r
+    end\r
+    object PopupJump: TMenuItem\r
+      Caption = '&Jump...'\r
+      OnClick = PopupJumpClick\r
+    end\r
+    object PopupProgram: TMenuItem\r
+      Caption = 'Program'\r
+    end\r
+    object PopupNavigation: TMenuItem\r
+      Caption = 'Navigation'\r
+    end\r
+    object PopupAudio: TMenuItem\r
+      Caption = 'Audio'\r
+    end\r
+    object PopupSubtitles: TMenuItem\r
+      Caption = 'Subtitles'\r
+    end\r
+    object PopupFile: TMenuItem\r
+      Caption = 'File'\r
+      object PopupOpenFile: TMenuItem\r
+        Caption = 'Open file...'\r
+        OnClick = PopupOpenFileClick\r
+      end\r
+      object PopupOpenDisc: TMenuItem\r
+        Caption = 'Open disc...'\r
+        OnClick = PopupOpenDiscClick\r
+      end\r
+      object PopupNetworkStream: TMenuItem\r
+        Caption = 'Network stream...'\r
+        OnClick = PopupNetworkStreamClick\r
+      end\r
+    end\r
+    object PopupPlaylist: TMenuItem\r
+      Caption = 'Playlist...'\r
+      OnClick = PopupPlaylistClick\r
+    end\r
+    object PopupPreferences: TMenuItem\r
+      Caption = 'Preferences...'\r
+      OnClick = PopupPreferencesClick\r
+    end\r
+    object N7: TMenuItem\r
+      Caption = '-'\r
+    end\r
+    object PopupExit: TMenuItem\r
+      Caption = 'E&xit'\r
+      OnClick = PopupExitClick\r
+    end\r
+  end\r
+  object TimerManage: TTimer\r
+    OnTimer = TimerManageTimer\r
+    Left = 136\r
+    Top = 176\r
+  end\r
+end\r
diff --git a/plugins/win32/mainframe.h b/plugins/win32/mainframe.h
new file mode 100644 (file)
index 0000000..04f5376
--- /dev/null
@@ -0,0 +1,202 @@
+/*****************************************************************************\r
+ * mainframe.h: Prototype for main window\r
+ *****************************************************************************\r
+ * Copyright (C) 2002 VideoLAN\r
+ *\r
+ * Authors: Olivier Teuliere <ipkiss@via.ecp.fr>\r
+ *\r
+ * This program is free software; you can redistribute it and/or modify\r
+ * it under the terms of the GNU General Public License as published by\r
+ * the Free Software Foundation; either version 2 of the License, or\r
+ * (at your option) any later version.\r
+ * \r
+ * This program is distributed in the hope that it will be useful,\r
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
+ * GNU General Public License for more details.\r
+ *\r
+ * You should have received a copy of the GNU General Public License\r
+ * along with this program; if not, write to the Free Software\r
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111, USA.\r
+ *****************************************************************************/\r
+\r
+\r
+#ifndef mainframeH\r
+#define mainframeH\r
+//---------------------------------------------------------------------------\r
+#include <Classes.hpp>\r
+#include <Controls.hpp>\r
+#include <StdCtrls.hpp>\r
+#include <Forms.hpp>\r
+#include <ComCtrls.hpp>\r
+#include <Dialogs.hpp>\r
+#include <ImgList.hpp>\r
+#include <Menus.hpp>\r
+#include <ToolWin.hpp>\r
+#include <AppEvnts.hpp>\r
+#include <ExtCtrls.hpp>\r
+//---------------------------------------------------------------------------\r
+class TMainFrameDlg : public TForm\r
+{\r
+__published:   // IDE-managed Components\r
+    TToolBar *ToolBar1;\r
+    TToolButton *ToolButtonFile;\r
+    TToolButton *ToolButtonDisc;\r
+    TToolButton *ToolButtonNet;\r
+    TToolButton *ToolButtonSep1;\r
+    TToolButton *ToolButtonBack;\r
+    TToolButton *ToolButtonStop;\r
+    TToolButton *ToolButtonPlay;\r
+    TToolButton *ToolButtonPause;\r
+    TToolButton *ToolButtonSlow;\r
+    TToolButton *ToolButtonFast;\r
+    TToolButton *ToolButtonSep2;\r
+    TToolButton *ToolButtonPlaylist;\r
+    TToolButton *ToolButtonPrev;\r
+    TToolButton *ToolButtonNext;\r
+    TMainMenu *MainMenu1;\r
+    TMenuItem *MenuFile;\r
+    TMenuItem *MenuOpenFile;\r
+    TMenuItem *MenuOpenDisc;\r
+    TMenuItem *MenuNetworkStream;\r
+    TMenuItem *N1;\r
+    TMenuItem *MenuExit;\r
+    TMenuItem *MenuView;\r
+    TMenuItem *MenuHideinterface;\r
+    TMenuItem *MenuFullscreen;\r
+    TMenuItem *N2;\r
+    TMenuItem *MenuTitle;\r
+    TMenuItem *MenuChapter;\r
+    TMenuItem *MenuAngle;\r
+    TMenuItem *N3;\r
+    TMenuItem *MenuPlaylist;\r
+    TMenuItem *MenuModules;\r
+    TMenuItem *MenuMessages;\r
+    TMenuItem *MenuSettings;\r
+    TMenuItem *MenuAudio;\r
+    TMenuItem *MenuSubtitles;\r
+    TMenuItem *N4;\r
+    TMenuItem *MenuPreferences;\r
+    TMenuItem *MenuHelp;\r
+    TMenuItem *MenuAbout;\r
+    TOpenDialog *OpenDialog1;\r
+    TImageList *ImageListToolbar;\r
+    TPopupMenu *PopupMenuMain;\r
+    TMenuItem *PopupPlay;\r
+    TMenuItem *PopupPause;\r
+    TMenuItem *PopupStop;\r
+    TMenuItem *PopupBack;\r
+    TMenuItem *PopupSlow;\r
+    TMenuItem *PopupFast;\r
+    TMenuItem *N5;\r
+    TMenuItem *PopupToggleInterface;\r
+    TMenuItem *PopupFullscreen;\r
+    TMenuItem *N6;\r
+    TMenuItem *PopupNext;\r
+    TMenuItem *PopupPrev;\r
+    TMenuItem *PopupJump;\r
+    TMenuItem *PopupNavigation;\r
+    TMenuItem *PopupProgram;\r
+    TMenuItem *PopupAudio;\r
+    TMenuItem *PopupSubtitles;\r
+    TMenuItem *PopupFile;\r
+    TMenuItem *PopupPlaylist;\r
+    TMenuItem *PopupPreferences;\r
+    TMenuItem *N7;\r
+    TMenuItem *PopupExit;\r
+    TToolButton *ToolButtonEject;\r
+    TStatusBar *StatusBar;\r
+    TGroupBox *GroupBoxFile;\r
+    TLabel *LabelFileName;\r
+    TGroupBox *GroupBoxNetwork;\r
+    TEdit *EditChannel;\r
+    TUpDown *UpDownChannel;\r
+    TLabel *LabelChannel;\r
+    TLabel *LabelServer;\r
+    TGroupBox *GroupBoxDisc;\r
+    TMenuItem *N8;\r
+    TMenuItem *MenuEjectDisc;\r
+    TMenuItem *MenuProgram;\r
+    TLabel *LabelDisc;\r
+    TLabel *LabelTitle;\r
+    TButton *ButtonTitlePrev;\r
+    TButton *ButtonTitleNext;\r
+    TButton *ButtonChapterPrev;\r
+    TButton *ButtonChapterNext;\r
+    TLabel *LabelChapter;\r
+    TLabel *LabelTitleCurrent;\r
+    TLabel *LabelChapterCurrent;\r
+    TButton *ButtonGo;\r
+    TGroupBox *GroupBoxSlider;\r
+    TTrackBar *TrackBar;\r
+    TTimer *TimerManage;\r
+    TMenuItem *PopupOpenFile;\r
+    TMenuItem *PopupOpenDisc;\r
+    TMenuItem *PopupNetworkStream;\r
+    TMenuItem *PopupClose;\r
+    TMenuItem *N9;\r
+    void __fastcall TimerManageTimer( TObject *Sender );\r
+    void __fastcall TrackBarChange( TObject *Sender );\r
+    void __fastcall FormClose( TObject *Sender, TCloseAction &Action );\r
+    void __fastcall MenuOpenFileClick( TObject *Sender );\r
+    void __fastcall MenuOpenDiscClick( TObject *Sender );\r
+    void __fastcall MenuNetworkStreamClick( TObject *Sender );\r
+    void __fastcall MenuExitClick( TObject *Sender );\r
+    void __fastcall MenuFullscreenClick( TObject *Sender );\r
+    void __fastcall MenuPlaylistClick( TObject *Sender );\r
+    void __fastcall MenuMessagesClick( TObject *Sender );\r
+    void __fastcall MenuPreferencesClick( TObject *Sender );\r
+    void __fastcall MenuAboutClick( TObject *Sender );\r
+    void __fastcall ToolButtonFileClick( TObject *Sender );\r
+    void __fastcall ToolButtonDiscClick( TObject *Sender );\r
+    void __fastcall ToolButtonNetClick( TObject *Sender );\r
+    void __fastcall ToolButtonPlaylistClick( TObject *Sender );\r
+    void __fastcall ToolButtonBackClick( TObject *Sender );\r
+    void __fastcall ToolButtonStopClick( TObject *Sender );\r
+    void __fastcall ToolButtonPlayClick( TObject *Sender );\r
+    void __fastcall ToolButtonPauseClick( TObject *Sender );\r
+    void __fastcall ToolButtonSlowClick( TObject *Sender );\r
+    void __fastcall ToolButtonFastClick( TObject *Sender );\r
+    void __fastcall ToolButtonPrevClick( TObject *Sender );\r
+    void __fastcall ToolButtonNextClick( TObject *Sender );\r
+    void __fastcall ToolButtonEjectClick( TObject *Sender );\r
+    void __fastcall PopupCloseClick( TObject *Sender );\r
+    void __fastcall PopupPlayClick( TObject *Sender );\r
+    void __fastcall PopupPauseClick( TObject *Sender );\r
+    void __fastcall PopupStopClick( TObject *Sender );\r
+    void __fastcall PopupBackClick( TObject *Sender );\r
+    void __fastcall PopupSlowClick( TObject *Sender );\r
+    void __fastcall PopupFastClick( TObject *Sender );\r
+    void __fastcall PopupToggleInterfaceClick( TObject *Sender );\r
+    void __fastcall PopupFullscreenClick( TObject *Sender );\r
+    void __fastcall PopupNextClick( TObject *Sender );\r
+    void __fastcall PopupPrevClick( TObject *Sender );\r
+    void __fastcall PopupJumpClick( TObject *Sender );\r
+    void __fastcall PopupPlaylistClick( TObject *Sender );\r
+    void __fastcall PopupPreferencesClick( TObject *Sender );\r
+    void __fastcall PopupExitClick( TObject *Sender );\r
+    void __fastcall PopupOpenFileClick( TObject *Sender );\r
+    void __fastcall PopupOpenDiscClick( TObject *Sender );\r
+    void __fastcall PopupNetworkStreamClick( TObject *Sender );\r
+    void __fastcall ButtonTitlePrevClick( TObject *Sender );\r
+    void __fastcall ButtonTitleNextClick( TObject *Sender );\r
+    void __fastcall ButtonChapterPrevClick( TObject *Sender );\r
+    void __fastcall ButtonChapterNextClick( TObject *Sender );\r
+    void __fastcall ButtonGoClick( TObject *Sender );\r
+private:       // User declarations\r
+public:                // User declarations\r
+    __fastcall TMainFrameDlg( TComponent* Owner );\r
+    void __fastcall DisplayHint( TObject *Sender );\r
+    void __fastcall ModeManage();\r
+    void __fastcall MenuProgramClick( TObject *Sender );\r
+    void __fastcall MenuAudioClick( TObject *Sender );\r
+    void __fastcall MenuSubtitleClick( TObject *Sender );\r
+    void __fastcall MenuTitleClick( TObject *Sender );\r
+    void __fastcall MenuChapterClick( TObject *Sender );\r
+    void __fastcall PopupProgramClick( TObject *Sender );\r
+    void __fastcall PopupAudioClick( TObject *Sender );\r
+    void __fastcall PopupSubtitleClick( TObject *Sender );\r
+    void __fastcall PopupNavigationClick( TObject *Sender );\r
+};\r
+//---------------------------------------------------------------------------\r
+#endif\r
diff --git a/plugins/win32/menu.cpp b/plugins/win32/menu.cpp
new file mode 100644 (file)
index 0000000..c2f514f
--- /dev/null
@@ -0,0 +1,815 @@
+/*****************************************************************************\r
+ * menu.cpp: functions to handle menu items\r
+ *****************************************************************************\r
+ * Copyright (C) 2002 VideoLAN\r
+ *\r
+ * Authors: Olivier Teuliere <ipkiss@via.ecp.fr>\r
+ *\r
+ * This program is free software; you can redistribute it and/or modify\r
+ * it under the terms of the GNU General Public License as published by\r
+ * the Free Software Foundation; either version 2 of the License, or\r
+ * (at your option) any later version.\r
+ * \r
+ * This program is distributed in the hope that it will be useful,\r
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
+ * GNU General Public License for more details.\r
+ *\r
+ * You should have received a copy of the GNU General Public License\r
+ * along with this program; if not, write to the Free Software\r
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111, USA.\r
+ *****************************************************************************/\r
+\r
+#include <vcl.h>\r
+//#pragma hdrstop\r
+\r
+#include <videolan/vlc.h>\r
+\r
+#include "stream_control.h"\r
+#include "input_ext-intf.h"\r
+\r
+#include "interface.h"\r
+#include "intf_playlist.h"\r
+\r
+#include "menu.h"\r
+#include "win32_common.h"\r
+\r
+\r
+/****************************************************************************\r
+ * Local Prototypes\r
+ ****************************************************************************/\r
+extern  struct intf_thread_s *p_intfGlobal;\r
+\r
+static TMenuItem *Index2Item( TMenuItem *, int, bool );\r
+static int Item2Index( TMenuItem *, TMenuItem * );\r
+static void __fastcall LangChange( TMenuItem *, TMenuItem *, TMenuItem *, int );\r
+static void __fastcall ProgramChange( TMenuItem *, TMenuItem * );\r
+\r
+static void __fastcall RadioMenu( TMenuItem *, AnsiString,\r
+                                  int, int, TNotifyEvent );\r
+static void __fastcall ProgramMenu( TMenuItem *, pgrm_descriptor_t *,\r
+                                    TNotifyEvent );\r
+static void __fastcall LanguageMenu( TMenuItem *t, es_descriptor_t *,\r
+                                     int, TNotifyEvent );\r
+static void __fastcall NavigationMenu( TMenuItem *, TNotifyEvent );\r
+\r
+\r
+static TMenuItem *Index2Item( TMenuItem *Root, int i_index, bool SingleColumn )\r
+{\r
+    if( SingleColumn || ( i_index < 20 ) )\r
+    {\r
+        return Root->Items[i_index];\r
+    }\r
+    else\r
+    {\r
+        return Root->Items[i_index / 10]->Items[i_index % 10];\r
+    }\r
+}\r
+\r
+static int Item2Index( TMenuItem *Root, TMenuItem *Item )\r
+{\r
+    if( Item->Parent == Root )\r
+    {\r
+        return Item->MenuIndex;\r
+    }\r
+    else\r
+    {\r
+        return( 10 * Item->Parent->MenuIndex + Item->MenuIndex );\r
+    }\r
+}\r
+\r
+\r
+/****************************************************************************\r
+ * LangChange: change audio or subtitles languages\r
+ ****************************************************************************\r
+ * Toggle the language, and update the selected menuitems.\r
+ ****************************************************************************/\r
+static void __fastcall LangChange( TMenuItem *RootCurrent, TMenuItem *Item,\r
+                                   TMenuItem *RootOther, int i_cat )\r
+{\r
+    intf_thread_t         * p_intf = p_intfGlobal;\r
+    es_descriptor_t       * p_es;\r
+    es_descriptor_t       * p_es_old;\r
+    int                     i_index;\r
+\r
+    /* find the selected ES */\r
+    i_index = Item2Index( RootCurrent, Item ) - 1;\r
+    if( i_index < 0 )\r
+    {\r
+        /* 'None' was selected */\r
+        p_es = NULL;\r
+    }\r
+    else\r
+    {\r
+        vlc_mutex_lock( &p_input_bank->pp_input[0]->stream.stream_lock );\r
+        p_es = p_input_bank->pp_input[0]->stream.pp_es[i_index];\r
+        vlc_mutex_unlock( &p_input_bank->pp_input[0]->stream.stream_lock );\r
+    }\r
+\r
+    /* find the current ES */\r
+    if( i_cat == AUDIO_ES )\r
+    {\r
+        p_es_old = p_intf->p_sys->p_audio_es_old;\r
+        p_intf->p_sys->p_audio_es_old = p_es;\r
+    }\r
+    else\r
+    {\r
+        p_es_old = p_intf->p_sys->p_spu_es_old;\r
+        p_intf->p_sys->p_spu_es_old = p_es;\r
+    }\r
+\r
+    /* exchange them */\r
+    input_ToggleES( p_input_bank->pp_input[0], p_es_old, false );\r
+    input_ToggleES( p_input_bank->pp_input[0], p_es, true );\r
+\r
+    Item->Checked = true;\r
+    Index2Item( RootOther, i_index + 1, true )->Checked = true;\r
+}\r
+\r
+\r
+/****************************************************************************\r
+ * ProgramChange: change the program\r
+ ****************************************************************************\r
+ * Toggle the program, and update the selected menuitems.\r
+ ****************************************************************************/\r
+static void __fastcall ProgramChange( TMenuItem *Item, TMenuItem *RootOther )\r
+{\r
+    intf_thread_t * p_intf = p_intfGlobal;\r
+    int             i_program = Item->Tag;\r
+\r
+    /* toggle the program */\r
+    input_ChangeProgram( p_input_bank->pp_input[0], (u16)i_program );\r
+\r
+    /* check selected menu items */\r
+    Item->Checked = true;\r
+    Index2Item( RootOther, i_program - 1, true )->Checked = true;\r
+\r
+    /* update audio/subtitles menus */\r
+    p_intf->p_sys->b_audio_update = 1;\r
+    p_intf->p_sys->b_spu_update = 1;\r
+    vlc_mutex_lock( &p_input_bank->pp_input[0]->stream.stream_lock );\r
+    SetupMenus( p_intf );\r
+    vlc_mutex_unlock( &p_input_bank->pp_input[0]->stream.stream_lock );\r
+    p_intf->p_sys->b_audio_update = 0;\r
+    p_intf->p_sys->b_spu_update = 0;\r
+\r
+    input_SetStatus( p_input_bank->pp_input[0], INPUT_STATUS_PLAY );\r
+}\r
+\r
+\r
+/****************************************************************************\r
+ * TMainFrameDlg::*Click: callbacks for the menuitems\r
+ ****************************************************************************\r
+ * These functions need to be in a class, or we won't be able to pass them\r
+ * as arguments (since TNotifyEvent uses __closure)\r
+ ****************************************************************************/\r
+\r
+ /*\r
+ * Audio\r
+ */\r
+\r
+void __fastcall TMainFrameDlg::MenuAudioClick( TObject *Sender )\r
+{\r
+    LangChange( MenuAudio, (TMenuItem *)Sender, PopupAudio, AUDIO_ES );\r
+}\r
+\r
+void __fastcall TMainFrameDlg::PopupAudioClick( TObject *Sender )\r
+{\r
+    LangChange( PopupAudio, (TMenuItem *)Sender, MenuAudio, AUDIO_ES );\r
+}\r
+\r
+/*\r
+ * Subtitles\r
+ */\r
+\r
+void __fastcall TMainFrameDlg::MenuSubtitleClick( TObject *Sender )\r
+{\r
+    LangChange( MenuSubtitles, (TMenuItem *)Sender, PopupSubtitles, SPU_ES );\r
+}\r
+\r
+void __fastcall TMainFrameDlg::PopupSubtitleClick( TObject *Sender )\r
+{\r
+    LangChange( PopupSubtitles, (TMenuItem *)Sender, MenuSubtitles, SPU_ES );\r
+}\r
+\r
+/*\r
+ * Program\r
+ */\r
+\r
+void __fastcall TMainFrameDlg::MenuProgramClick( TObject *Sender )\r
+{\r
+    ProgramChange( (TMenuItem *)Sender, PopupProgram );\r
+}\r
+\r
+void __fastcall TMainFrameDlg::PopupProgramClick( TObject *Sender )\r
+{\r
+    ProgramChange( (TMenuItem *)Sender, MenuProgram );\r
+}\r
+\r
+/*\r
+ * Navigation\r
+ */\r
+\r
+void __fastcall TMainFrameDlg::PopupNavigationClick( TObject *Sender )\r
+{\r
+    TMenuItem     * Item = (TMenuItem *)Sender;\r
+    TMenuItem     * ItemTitle;\r
+    input_area_t  * p_area;\r
+    int             i_title   = DATA2TITLE( Item->Tag );\r
+    int             i_chapter = DATA2CHAPTER( Item->Tag );\r
+\r
+    p_area = p_input_bank->pp_input[0]->stream.pp_areas[i_title];\r
+    p_area->i_part = i_chapter;\r
+\r
+    input_ChangeArea( p_input_bank->pp_input[0], (input_area_t*)p_area );\r
+\r
+    Item->Checked = true;\r
+    ItemTitle = Index2Item( MenuTitle, i_title - 1, false );\r
+    if( ItemTitle->Checked )\r
+    {\r
+        /* same title, new chapter */\r
+        Index2Item( MenuChapter, i_chapter - 1, false )->Checked = true;\r
+    }\r
+    else\r
+    {\r
+        /* new title => we must rebuild the chapter menu */\r
+        vlc_mutex_lock( &p_input_bank->pp_input[0]->stream.stream_lock );\r
+        RadioMenu( MenuChapter, "Chapter",\r
+                   p_input_bank->pp_input[0]->stream.p_selected_area->i_part_nb,\r
+                   i_chapter, MenuChapterClick );\r
+        vlc_mutex_unlock( &p_input_bank->pp_input[0]->stream.stream_lock );\r
+    }\r
+\r
+    input_SetStatus( p_input_bank->pp_input[0], INPUT_STATUS_PLAY );\r
+}\r
+\r
+/*\r
+ * Title\r
+ */\r
+\r
+void __fastcall TMainFrameDlg::MenuTitleClick( TObject *Sender )\r
+{\r
+    TMenuItem     * Item = (TMenuItem *)Sender;\r
+    TMenuItem     * ItemTitle;\r
+    int             i_title = Item->Tag;\r
+\r
+    input_ChangeArea( p_input_bank->pp_input[0],\r
+                      p_input_bank->pp_input[0]->stream.pp_areas[i_title] );\r
+    Item->Checked = true;\r
+    ItemTitle = Index2Item( PopupNavigation, i_title - 1, false );\r
+    Index2Item( ItemTitle, 0, false )->Checked = true;\r
+\r
+    input_SetStatus( p_input_bank->pp_input[0], INPUT_STATUS_PLAY );\r
+}\r
+\r
+/*\r
+ * Chapter\r
+ */\r
+\r
+void __fastcall TMainFrameDlg::MenuChapterClick( TObject *Sender )\r
+{\r
+    TMenuItem     * Item = (TMenuItem *)Sender;\r
+    TMenuItem     * ItemTitle;\r
+    input_area_t  * p_area;\r
+    int             i_title;\r
+    int             i_chapter = Item->Tag;\r
+\r
+    p_area = p_input_bank->pp_input[0]->stream.p_selected_area;\r
+    p_area->i_part = i_chapter;\r
+\r
+    input_ChangeArea( p_input_bank->pp_input[0], (input_area_t*)p_area );\r
+\r
+    i_title = p_input_bank->pp_input[0]->stream.p_selected_area->i_id;\r
+    ItemTitle = Index2Item( PopupNavigation, i_title - 1, false );\r
+    Index2Item( ItemTitle, i_chapter - 1, false )->Checked = true;\r
+\r
+    input_SetStatus( p_input_bank->pp_input[0], INPUT_STATUS_PLAY );\r
+}\r
+\r
+\r
+/****************************************************************************\r
+ * Functions to generate menus\r
+ ****************************************************************************/\r
+\r
+/*****************************************************************************\r
+ * RadioMenu: update interactive menus of the interface\r
+ *****************************************************************************\r
+ * Sets up menus with information from input\r
+ * Warning: since this function is designed to be called by management\r
+ * function, the interface lock has to be taken\r
+ *****************************************************************************/\r
+static void __fastcall RadioMenu( TMenuItem * Root, AnsiString ItemName,\r
+                                  int i_nb, int i_selected,\r
+                                  TNotifyEvent MenuItemClick )\r
+{\r
+    TMenuItem     * ItemGroup;\r
+    TMenuItem     * Item;\r
+    TMenuItem     * ItemActive;\r
+    AnsiString      Name;\r
+    int             i_item;\r
+\r
+    /* remove previous menu */\r
+    Root->Enabled = false;\r
+    Root->Clear();\r
+\r
+    ItemActive = NULL;\r
+\r
+    for( i_item = 0; i_item < i_nb; i_item++ )\r
+    {\r
+        /* we group titles/chapters in packets of ten for small screens */\r
+        if( ( i_item % 10 == 0 ) && ( i_nb > 20 ) )\r
+        {\r
+            if( i_item != 0 )\r
+            {\r
+                Root->Add( ItemGroup );\r
+            }\r
+\r
+            Name.sprintf( "%ss %d to %d", ItemName, i_item + 1, i_item + 10 );\r
+            ItemGroup = new TMenuItem( Root );\r
+            ItemGroup->Hint = Name;\r
+\r
+            /* set the accelerator character */\r
+            Name.Insert( "&", Name.Length() - 1 );\r
+            ItemGroup->Caption = Name;\r
+        }\r
+\r
+        Name.sprintf( "%s %d", ItemName, i_item + 1 );\r
+        Item = new TMenuItem( Root );\r
+        Item->RadioItem = true;\r
+        Item->Hint = Name;\r
+\r
+        /* set the accelerator character */\r
+        Name.Insert( "&", Name.Length() );\r
+        Item->Caption = Name;\r
+\r
+        /* FIXME: temporary hack to save i_item with the Item\r
+         * It will be used in the callback. */\r
+        Item->Tag = i_item + 1;\r
+\r
+        if( i_selected == i_item + 1 )\r
+        {\r
+            ItemActive = Item;\r
+        }\r
+        \r
+        /* setup signal handling */\r
+        Item->OnClick = MenuItemClick;\r
+\r
+        if( i_nb > 20 )\r
+        {\r
+            ItemGroup->Add( Item );\r
+        }\r
+        else\r
+        {\r
+            Root->Add( Item );\r
+        }\r
+    }\r
+\r
+//  if( ( i_nb > 20 ) && ( i_item % 10 ) )  ?\r
+    if( i_nb > 20 )\r
+    {\r
+        Root->Add( ItemGroup );\r
+    }\r
+\r
+    /* check currently selected chapter */\r
+    if( ItemActive != NULL )\r
+    {\r
+        ItemActive->Checked = true;\r
+    }\r
+\r
+    /* be sure that menu is enabled, if there are several items */\r
+    if( i_nb > 1 )\r
+    {\r
+        Root->Enabled = true;\r
+    }\r
+}\r
+\r
+\r
+/*****************************************************************************\r
+ * ProgramMenu: update the programs menu of the interface\r
+ *****************************************************************************\r
+ * Builds the program menu according to what have been found in the PAT \r
+ * by the input. Useful for multi-programs streams such as DVB ones.\r
+ *****************************************************************************/\r
+static void __fastcall ProgramMenu( TMenuItem * Root,\r
+                                    pgrm_descriptor_t * p_pgrm,\r
+                                    TNotifyEvent MenuItemClick )\r
+{\r
+    TMenuItem     * Item;\r
+    TMenuItem     * ItemActive;\r
+    AnsiString      Name;\r
+    int             i;\r
+\r
+    /* remove previous menu */\r
+    Root->Clear();\r
+    Root->Enabled = false;\r
+\r
+    ItemActive = NULL;\r
+\r
+    /* create a set of program buttons and append them to the container */\r
+    for( i = 0; i < p_input_bank->pp_input[0]->stream.i_pgrm_number; i++ )\r
+    {\r
+        Name.sprintf( "id %d",\r
+            p_input_bank->pp_input[0]->stream.pp_programs[i]->i_number );\r
+\r
+        Item = new TMenuItem( Root );\r
+        Item->Caption = Name;\r
+        Item->Hint = Name;\r
+        Item->RadioItem = true;\r
+        Item->OnClick = MenuItemClick;\r
+\r
+        /* FIXME: temporary hack to save the program id with the Item\r
+         * It will be used in the callback. */\r
+        Item->Tag = i + 1;\r
+\r
+        if( p_pgrm == p_input_bank->pp_input[0]->stream.pp_programs[i] )\r
+        {\r
+            /* don't lose Item when we append into menu */\r
+            ItemActive = Item;\r
+        }\r
+\r
+        /* Add the item to the submenu */\r
+        Root->Add( Item );\r
+    }\r
+\r
+    /* check currently selected program */\r
+    if( ItemActive != NULL )\r
+    {\r
+        ItemActive->Checked = true;\r
+    }\r
+\r
+    /* be sure that menu is enabled if more than 1 program */\r
+    if( p_input_bank->pp_input[0]->stream.i_pgrm_number > 1 )\r
+    {\r
+        Root->Enabled = true;\r
+    }\r
+}\r
+\r
+\r
+/*****************************************************************************\r
+ * LanguageMenus: update interactive menus of the interface\r
+ *****************************************************************************\r
+ * Sets up menus with information from input:\r
+ *  - languages\r
+ *  - sub-pictures\r
+ * Warning: since this function is designed to be called by management\r
+ * function, the interface lock has to be taken\r
+ *****************************************************************************/\r
+static void __fastcall LanguageMenu( TMenuItem * Root, es_descriptor_t * p_es,\r
+                                      int i_cat, TNotifyEvent MenuItemClick )\r
+{\r
+    TMenuItem     * Separator;\r
+    TMenuItem     * Item;\r
+    TMenuItem     * ItemActive;\r
+    AnsiString      Name;\r
+    int             i_item;\r
+    int             i;\r
+\r
+    /* remove previous menu */\r
+    Root->Clear();\r
+    Root->Enabled = false;\r
+\r
+    /* special case for "off" item */\r
+    Name = "None";\r
+    Item = new TMenuItem( Root );\r
+    Item->RadioItem = true;\r
+    Item->Hint = Name;\r
+    Item->Caption = Name;\r
+    Item->OnClick = MenuItemClick;\r
+    Root->Add( Item );\r
+\r
+    /* separator item */\r
+    Separator = new TMenuItem( Root );\r
+    Separator->Caption = "-";\r
+    Root->Add( Separator );\r
+\r
+    ItemActive = NULL;\r
+    i_item = 0;\r
+\r
+    vlc_mutex_lock( &p_input_bank->pp_input[0]->stream.stream_lock );\r
+\r
+#define ES p_input_bank->pp_input[0]->stream.pp_es[i]\r
+    /* create a set of language buttons and append them to the Root */\r
+    for( i = 0; i < p_input_bank->pp_input[0]->stream.i_es_number; i++ )\r
+    {\r
+        if( ( ES->i_cat == i_cat ) &&\r
+            ( !ES->p_pgrm ||\r
+              ES->p_pgrm ==\r
+                 p_input_bank->pp_input[0]->stream.p_selected_program ) )\r
+        {\r
+            i_item++;\r
+            Name = p_input_bank->pp_input[0]->stream.pp_es[i]->psz_desc;\r
+            if( Name.IsEmpty() )\r
+            {\r
+                Name.sprintf( "Language %d", i_item );\r
+            }\r
+\r
+            Item = new TMenuItem( Root );\r
+            Item->RadioItem = true;\r
+            Item->Hint = Name;\r
+            Item->Caption = Name;\r
+\r
+            if( p_es == p_input_bank->pp_input[0]->stream.pp_es[i] )\r
+            {\r
+                /* don't lose Item when we append into menu */\r
+                ItemActive = Item;\r
+            }\r
+\r
+            /* setup signal hanling */\r
+            Item->OnClick = MenuItemClick;\r
+            Root->Add( Item );\r
+        }\r
+    }\r
+#undef ES\r
+\r
+    vlc_mutex_unlock( &p_input_bank->pp_input[0]->stream.stream_lock );\r
+\r
+    /* check currently selected item */\r
+    if( ItemActive != NULL )\r
+    {\r
+        ItemActive->Checked = true;\r
+    }\r
+\r
+    /* be sure that menu is enabled if non empty */\r
+    if( i_item > 0 )\r
+    {\r
+        Root->Enabled = true;\r
+    }\r
+}\r
+\r
+\r
+/*****************************************************************************\r
+ * NavigationMenu: sets menus for titles and chapters selection\r
+ *****************************************************************************\r
+ * Generates two types of menus:\r
+ *  -simple list of titles\r
+ *  -cascaded lists of chapters for each title\r
+ *****************************************************************************/\r
+static void __fastcall NavigationMenu( TMenuItem * Root,\r
+                                       TNotifyEvent MenuItemClick )\r
+{\r
+    TMenuItem     * TitleGroup;\r
+    TMenuItem     * TitleItem;\r
+    TMenuItem     * ItemActive;\r
+    TMenuItem     * ChapterGroup;\r
+    TMenuItem     * ChapterItem;\r
+    AnsiString      Name;\r
+    int             i_title;\r
+    int             i_chapter;\r
+    int             i_title_nb;\r
+    int             i_chapter_nb;\r
+\r
+\r
+    /* remove previous menu */\r
+    Root->Enabled = false;\r
+    Root->Clear();\r
+\r
+    ItemActive = NULL;\r
+    i_title_nb = p_input_bank->pp_input[0]->stream.i_area_nb;\r
+    \r
+    /* loop on titles */\r
+    for( i_title = 1; i_title < i_title_nb; i_title++ )\r
+    {\r
+        /* we group titles in packets of ten for small screens */\r
+        if( ( i_title % 10 == 1 ) && ( i_title_nb > 20 ) )\r
+        {\r
+            if( i_title != 1 )\r
+            {\r
+                Root->Add( TitleGroup );\r
+            }\r
+\r
+            Name.sprintf( "%d - %d", i_title, i_title + 9 );\r
+            TitleGroup = new TMenuItem( Root );\r
+            TitleGroup->RadioItem = true;\r
+            TitleGroup->Hint = Name;\r
+            TitleGroup->Caption = Name;\r
+        }\r
+\r
+        Name.sprintf( "Title %d (%d)", i_title,\r
+            p_input_bank->pp_input[0]->stream.pp_areas[i_title]->i_part_nb );\r
+\r
+        {\r
+            TitleItem = new TMenuItem( Root );\r
+            TitleItem->RadioItem = true;\r
+            TitleItem->Hint = Name;\r
+            TitleItem->Caption = Name;\r
+\r
+            i_chapter_nb =\r
+                p_input_bank->pp_input[0]->stream.pp_areas[i_title]->i_part_nb;\r
+\r
+            /* loop on chapters */\r
+            for( i_chapter = 0; i_chapter < i_chapter_nb; i_chapter++ )\r
+            {\r
+                /* we group chapters in packets of ten for small screens */\r
+                if( ( i_chapter % 10 == 0 ) && ( i_chapter_nb > 20 ) )\r
+                {\r
+                    if( i_chapter != 0 )\r
+                    {\r
+                        TitleItem->Add( ChapterGroup );\r
+                    }\r
+\r
+                    Name.sprintf( "%d - %d", i_chapter + 1, i_chapter + 10 );\r
+                    ChapterGroup = new TMenuItem( TitleItem );\r
+                    ChapterGroup->RadioItem = true;\r
+                    ChapterGroup->Hint = Name;\r
+                    ChapterGroup->Caption = Name;\r
+                }\r
+\r
+                Name.sprintf( "Chapter %d", i_chapter + 1 );\r
+\r
+                ChapterItem = new TMenuItem( TitleItem );\r
+                ChapterItem->RadioItem = true;\r
+                ChapterItem->Hint = Name;\r
+                ChapterItem->Caption = Name;\r
+\r
+                /* FIXME: temporary hack to save i_title and i_chapter with\r
+                 * ChapterItem, since we will need them in the callback */\r
+                 ChapterItem->Tag = (int)POS2DATA( i_title, i_chapter + 1 );\r
+\r
+#define p_area p_input_bank->pp_input[0]->stream.pp_areas[i_title]\r
+                if( ( p_area ==\r
+                        p_input_bank->pp_input[0]->stream.p_selected_area ) &&\r
+                    ( p_area->i_part == i_chapter + 1 ) )\r
+                {\r
+                    ItemActive = ChapterItem;\r
+                }\r
+#undef p_area\r
+\r
+                /* setup signal hanling */\r
+                ChapterItem->OnClick = MenuItemClick;\r
+\r
+                if( i_chapter_nb > 20 )\r
+                {\r
+                    ChapterGroup->Add( ChapterItem );\r
+                }\r
+                else\r
+                {\r
+                    TitleItem->Add( ChapterItem );\r
+                }\r
+            }\r
+\r
+            if( i_chapter_nb > 20 )\r
+            {\r
+                TitleItem->Add( ChapterGroup );\r
+            }\r
+\r
+            if( p_input_bank->pp_input[0]->stream.pp_areas[i_title]->i_part_nb\r
+                > 1 )\r
+            {\r
+                /* be sure that menu is sensitive */\r
+                Root->Enabled = true;\r
+            }\r
+        }\r
+\r
+        if( i_title_nb > 20 )\r
+        {\r
+            TitleGroup->Add( TitleItem );\r
+        }\r
+        else\r
+        {\r
+            Root->Add( TitleItem );\r
+        }\r
+    }\r
+\r
+    if( i_title_nb > 20 )\r
+    {\r
+        Root->Add( TitleGroup );\r
+    }\r
+\r
+    /* Default selected chapter */\r
+    if( ItemActive != NULL )\r
+    {\r
+        ItemActive->Checked = true;\r
+    }\r
+\r
+    /* be sure that menu is sensitive */\r
+    Root->Enabled = true;\r
+}\r
+\r
+\r
+/*****************************************************************************\r
+ * SetupMenus: function that generates title/chapter/audio/subpic\r
+ * menus with help from preceding functions\r
+ *****************************************************************************/\r
+int __fastcall SetupMenus( intf_thread_t * p_intf )\r
+{\r
+    TMainFrameDlg     * p_window = p_intf->p_sys->p_window;\r
+    es_descriptor_t   * p_audio_es;\r
+    es_descriptor_t   * p_spu_es;\r
+    int                 i;\r
+\r
+    p_intf->p_sys->b_chapter_update |= p_intf->p_sys->b_title_update;\r
+    p_intf->p_sys->b_audio_update |= p_intf->p_sys->b_title_update |\r
+                                     p_intf->p_sys->b_program_update;\r
+    p_intf->p_sys->b_spu_update |= p_intf->p_sys->b_title_update |\r
+                                   p_intf->p_sys->b_program_update;\r
+\r
+    if( p_intf->p_sys->b_program_update )\r
+    { \r
+        pgrm_descriptor_t * p_pgrm;\r
+\r
+        if( p_input_bank->pp_input[0]->stream.p_new_program )\r
+        {\r
+            p_pgrm = p_input_bank->pp_input[0]->stream.p_new_program;\r
+        }\r
+        else\r
+        {\r
+            p_pgrm = p_input_bank->pp_input[0]->stream.p_selected_program;\r
+        }\r
+\r
+        ProgramMenu( p_window->MenuProgram, p_pgrm,\r
+                     p_window->MenuProgramClick );\r
+        ProgramMenu( p_window->PopupProgram, p_pgrm,\r
+                     p_window->PopupProgramClick );\r
+\r
+        p_intf->p_sys->b_program_update = 0;\r
+    }\r
+\r
+    if( p_intf->p_sys->b_title_update )\r
+    {\r
+        RadioMenu( p_window->MenuTitle, "Title",\r
+//why "-1" ?\r
+                   p_input_bank->pp_input[0]->stream.i_area_nb - 1,\r
+                   p_input_bank->pp_input[0]->stream.p_selected_area->i_id,\r
+                   p_window->MenuTitleClick );\r
+\r
+        AnsiString CurrentTitle;\r
+        CurrentTitle.sprintf( "%d",\r
+                    p_input_bank->pp_input[0]->stream.p_selected_area->i_id );\r
+        p_window->LabelTitleCurrent->Caption = CurrentTitle;\r
+\r
+        p_intf->p_sys->b_title_update = 0;\r
+    }\r
+\r
+    if( p_intf->p_sys->b_chapter_update )\r
+    {\r
+        RadioMenu( p_window->MenuChapter, "Chapter",\r
+                   p_input_bank->pp_input[0]->stream.p_selected_area->i_part_nb,\r
+                   p_input_bank->pp_input[0]->stream.p_selected_area->i_part,\r
+                   p_window->MenuChapterClick );\r
+\r
+        NavigationMenu( p_window->PopupNavigation,\r
+                        p_window->PopupNavigationClick );\r
+\r
+        AnsiString CurrentChapter;\r
+        CurrentChapter.sprintf( "%d",\r
+                    p_input_bank->pp_input[0]->stream.p_selected_area->i_part );\r
+        p_window->LabelChapterCurrent->Caption = CurrentChapter;\r
+\r
+        p_intf->p_sys->i_part =\r
+                    p_input_bank->pp_input[0]->stream.p_selected_area->i_part;\r
+\r
+        p_intf->p_sys->b_chapter_update = 0;\r
+    }\r
+\r
+    /* look for selected ES */\r
+    p_audio_es = NULL;\r
+    p_spu_es = NULL;\r
+\r
+     for( i = 0; i < p_input_bank->pp_input[0]->stream.i_selected_es_number; i++ )\r
+    {\r
+        if( p_input_bank->pp_input[0]->stream.pp_selected_es[i]->i_cat\r
+            == AUDIO_ES )\r
+        {\r
+            p_audio_es = p_input_bank->pp_input[0]->stream.pp_selected_es[i];\r
+            p_intfGlobal->p_sys->p_audio_es_old = p_audio_es;\r
+        }\r
+\r
+        if( p_input_bank->pp_input[0]->stream.pp_selected_es[i]->i_cat\r
+            == SPU_ES )\r
+        {\r
+            p_spu_es = p_input_bank->pp_input[0]->stream.pp_selected_es[i];\r
+            p_intfGlobal->p_sys->p_spu_es_old = p_spu_es;\r
+        }\r
+    }\r
+\r
+    vlc_mutex_unlock( &p_input_bank->pp_input[0]->stream.stream_lock );\r
+\r
+    /* audio menus */\r
+    if( p_intf->p_sys->b_audio_update )\r
+    {\r
+        LanguageMenu( p_window->MenuAudio, p_audio_es, AUDIO_ES,\r
+                      p_window->MenuAudioClick );\r
+        LanguageMenu( p_window->PopupAudio, p_audio_es, AUDIO_ES,\r
+                      p_window->PopupAudioClick );\r
+\r
+        p_intf->p_sys->b_audio_update = 0;\r
+    }\r
+\r
+    /* sub picture menus */\r
+    if( p_intf->p_sys->b_spu_update )\r
+    {\r
+        LanguageMenu( p_window->PopupSubtitles, p_spu_es, SPU_ES,\r
+                      p_window->PopupSubtitleClick );\r
+        LanguageMenu( p_window->MenuSubtitles, p_spu_es, SPU_ES,\r
+                      p_window->MenuSubtitleClick );\r
+\r
+        p_intf->p_sys->b_spu_update = 0;\r
+    }\r
+\r
+    vlc_mutex_lock( &p_input_bank->pp_input[0]->stream.stream_lock );\r
+\r
+    return true;\r
+}\r
+\r
+\r
+\r
diff --git a/plugins/win32/menu.h b/plugins/win32/menu.h
new file mode 100644 (file)
index 0000000..ef84a92
--- /dev/null
@@ -0,0 +1,34 @@
+/*****************************************************************************\r
+ * menu.h: prototypes for menu functions\r
+ *****************************************************************************\r
+ * Copyright (C) 2002 VideoLAN\r
+ *\r
+ * Authors: Olivier Teuliere <ipkiss@via.ecp.fr>\r
+ *\r
+ * This program is free software; you can redistribute it and/or modify\r
+ * it under the terms of the GNU General Public License as published by\r
+ * the Free Software Foundation; either version 2 of the License, or\r
+ * (at your option) any later version.\r
+ * \r
+ * This program is distributed in the hope that it will be useful,\r
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
+ * GNU General Public License for more details.\r
+ *\r
+ * You should have received a copy of the GNU General Public License\r
+ * along with this program; if not, write to the Free Software\r
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111, USA.\r
+ *****************************************************************************/\r
+\r
+struct intf_thread_s;\r
+\r
+int __fastcall SetupMenus( struct intf_thread_s * );\r
+\r
+/*****************************************************************************\r
+ * Convert user_data structures to title and chapter information\r
+ *****************************************************************************/\r
+#define DATA2TITLE( data )    ( (int)((long)(data)) >> 16 )\r
+#define DATA2CHAPTER( data )  ( (int)((long)(data)) & 0xffff )\r
+#define POS2DATA( title, chapter ) ( NULL + ( ((title) << 16) \\r
+                                            | ((chapter) & 0xffff)) )\r
+\r
diff --git a/plugins/win32/messages.cpp b/plugins/win32/messages.cpp
new file mode 100644 (file)
index 0000000..2966915
--- /dev/null
@@ -0,0 +1,99 @@
+/*****************************************************************************\r
+ * messages.cpp: log window.\r
+ *****************************************************************************\r
+ * Copyright (C) 2002 VideoLAN\r
+ *\r
+ * Authors: Olivier Teuliere <ipkiss@via.ecp.fr>\r
+ *\r
+ * This program is free software; you can redistribute it and/or modify\r
+ * it under the terms of the GNU General Public License as published by\r
+ * the Free Software Foundation; either version 2 of the License, or\r
+ * (at your option) any later version.\r
+ * \r
+ * This program is distributed in the hope that it will be useful,\r
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
+ * GNU General Public License for more details.\r
+ *\r
+ * You should have received a copy of the GNU General Public License\r
+ * along with this program; if not, write to the Free Software\r
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111, USA.\r
+ *****************************************************************************/\r
+\r
+#include <vcl.h>\r
+#pragma hdrstop\r
+\r
+#include <videolan/vlc.h>\r
+\r
+#include "interface.h"\r
+\r
+#include "win32_common.h"\r
+#include "messages.h"\r
+\r
+//---------------------------------------------------------------------------\r
+#pragma package(smart_init)\r
+#pragma resource "*.dfm"\r
+\r
+extern  struct intf_thread_s *p_intfGlobal;\r
+\r
+//---------------------------------------------------------------------------\r
+__fastcall TMessagesDlg::TMessagesDlg( TComponent* Owner )\r
+    : TForm( Owner )\r
+{\r
+    Icon = p_intfGlobal->p_sys->p_window->Icon;\r
+}\r
+//---------------------------------------------------------------------------\r
+void __fastcall TMessagesDlg::ButtonOKClick( TObject *Sender )\r
+{\r
+    Hide();\r
+}\r
+//---------------------------------------------------------------------------\r
+void __fastcall TMessagesDlg::FormHide( TObject *Sender )\r
+{\r
+    p_intfGlobal->p_sys->p_window->MenuMessages->Checked = false;\r
+}\r
+//---------------------------------------------------------------------------\r
+void __fastcall TMessagesDlg::FormShow( TObject *Sender )\r
+{\r
+    p_intfGlobal->p_sys->p_window->MenuMessages->Checked = true;\r
+}\r
+//---------------------------------------------------------------------------\r
+void __fastcall TMessagesDlg::UpdateLog()\r
+{\r
+    intf_subscription_t *p_sub = p_intfGlobal->p_sys->p_sub;\r
+    int                 i_start;\r
+    int                 i_stop;\r
+\r
+    vlc_mutex_lock( p_sub->p_lock );\r
+    i_stop = *p_sub->pi_stop;\r
+    vlc_mutex_unlock( p_sub->p_lock );\r
+\r
+    if( p_sub->i_start != i_stop )\r
+    {\r
+        for( i_start = p_sub->i_start;\r
+             i_start != i_stop;\r
+             i_start = (i_start+1) % INTF_MSG_QSIZE )\r
+        {\r
+            /* Append all messages to log window */\r
+            switch( p_sub->p_msg[i_start].i_type )\r
+            {\r
+            case INTF_MSG_ERR:\r
+                RichEditMessages->SelAttributes->Color = clRed;\r
+                break;\r
+            case INTF_MSG_WARN:\r
+                RichEditMessages->SelAttributes->Color = clBlack;\r
+                break;\r
+            default:\r
+                RichEditMessages->SelAttributes->Color = clBlue;\r
+                break;\r
+            }\r
+\r
+            RichEditMessages->Lines->Add( p_sub->p_msg[i_start].psz_msg );\r
+        }\r
+\r
+        vlc_mutex_lock( p_sub->p_lock );\r
+        p_sub->i_start = i_start;\r
+        vlc_mutex_unlock( p_sub->p_lock );\r
+    } \r
+}\r
+//---------------------------------------------------------------------------\r
diff --git a/plugins/win32/messages.dfm b/plugins/win32/messages.dfm
new file mode 100644 (file)
index 0000000..5f9c13a
--- /dev/null
@@ -0,0 +1,40 @@
+object MessagesDlg: TMessagesDlg\r
+  Left = 325\r
+  Top = 160\r
+  Width = 440\r
+  Height = 502\r
+  Caption = 'Messages'\r
+  Color = clBtnFace\r
+  Font.Charset = DEFAULT_CHARSET\r
+  Font.Color = clPurple\r
+  Font.Height = -11\r
+  Font.Name = 'MS Sans Serif'\r
+  Font.Style = []\r
+  OldCreateOrder = False\r
+  OnHide = FormHide\r
+  OnShow = FormShow\r
+  PixelsPerInch = 96\r
+  TextHeight = 13\r
+  object RichEditMessages: TRichEdit\r
+    Left = 0\r
+    Top = 0\r
+    Width = 432\r
+    Height = 424\r
+    Align = alTop\r
+    Anchors = [akLeft, akTop, akRight, akBottom]\r
+    ReadOnly = True\r
+    ScrollBars = ssBoth\r
+    TabOrder = 0\r
+    WantReturns = False\r
+  end\r
+  object ButtonOK: TButton\r
+    Left = 144\r
+    Top = 437\r
+    Width = 145\r
+    Height = 25\r
+    Anchors = [akBottom]\r
+    Caption = 'OK'\r
+    TabOrder = 1\r
+    OnClick = ButtonOKClick\r
+  end\r
+end\r
diff --git a/plugins/win32/messages.h b/plugins/win32/messages.h
new file mode 100644 (file)
index 0000000..ff81032
--- /dev/null
@@ -0,0 +1,46 @@
+/*****************************************************************************\r
+ * messages.h: log window\r
+ *****************************************************************************\r
+ * Copyright (C) 2002 VideoLAN\r
+ *\r
+ * Authors: Olivier Teuliere <ipkiss@via.ecp.fr>\r
+ *\r
+ * This program is free software; you can redistribute it and/or modify\r
+ * it under the terms of the GNU General Public License as published by\r
+ * the Free Software Foundation; either version 2 of the License, or\r
+ * (at your option) any later version.\r
+ * \r
+ * This program is distributed in the hope that it will be useful,\r
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
+ * GNU General Public License for more details.\r
+ *\r
+ * You should have received a copy of the GNU General Public License\r
+ * along with this program; if not, write to the Free Software\r
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111, USA.\r
+ *****************************************************************************/\r
+\r
+#ifndef messagesH\r
+#define messagesH\r
+//---------------------------------------------------------------------------\r
+#include <Classes.hpp>\r
+#include <Controls.hpp>\r
+#include <StdCtrls.hpp>\r
+#include <Forms.hpp>\r
+#include <ComCtrls.hpp>\r
+//---------------------------------------------------------------------------\r
+class TMessagesDlg : public TForm\r
+{\r
+__published:   // IDE-managed Components\r
+    TRichEdit *RichEditMessages;\r
+    TButton *ButtonOK;\r
+    void __fastcall ButtonOKClick( TObject *Sender );\r
+    void __fastcall FormHide( TObject *Sender );\r
+    void __fastcall FormShow( TObject *Sender );\r
+private:       // User declarations\r
+public:                // User declarations\r
+    __fastcall TMessagesDlg( TComponent* Owner );\r
+    void __fastcall UpdateLog();\r
+};\r
+//---------------------------------------------------------------------------\r
+#endif\r
diff --git a/plugins/win32/network.cpp b/plugins/win32/network.cpp
new file mode 100644 (file)
index 0000000..094df14
--- /dev/null
@@ -0,0 +1,176 @@
+/*****************************************************************************\r
+ * network.cpp: the "network" dialog box\r
+ *****************************************************************************\r
+ * Copyright (C) 2002 VideoLAN\r
+ *\r
+ * Authors: Olivier Teuliere <ipkiss@via.ecp.fr>\r
+ *\r
+ * This program is free software; you can redistribute it and/or modify\r
+ * it under the terms of the GNU General Public License as published by\r
+ * the Free Software Foundation; either version 2 of the License, or\r
+ * (at your option) any later version.\r
+ * \r
+ * This program is distributed in the hope that it will be useful,\r
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
+ * GNU General Public License for more details.\r
+ *\r
+ * You should have received a copy of the GNU General Public License\r
+ * along with this program; if not, write to the Free Software\r
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111, USA.\r
+ *****************************************************************************/\r
+\r
+#include <vcl.h>\r
+#pragma hdrstop\r
+\r
+#include <videolan/vlc.h>\r
+\r
+#include "stream_control.h"\r
+#include "input_ext-intf.h"\r
+\r
+#include "interface.h"\r
+#include "intf_playlist.h"\r
+\r
+#include "network.h"\r
+#include "win32_common.h"\r
+\r
+#include "netutils.h"\r
+\r
+//---------------------------------------------------------------------------\r
+//#pragma package(smart_init)\r
+#pragma resource "*.dfm"\r
+\r
+extern struct intf_thread_s *p_intfGlobal;\r
+\r
+//---------------------------------------------------------------------------\r
+__fastcall TNetworkDlg::TNetworkDlg( TComponent* Owner )\r
+        : TForm( Owner )\r
+{\r
+}\r
+//---------------------------------------------------------------------------\r
+void __fastcall TNetworkDlg::FormShow( TObject *Sender )\r
+{\r
+    p_intfGlobal->p_sys->p_window->MenuNetworkStream->Checked = true;\r
+    p_intfGlobal->p_sys->p_window->PopupNetworkStream->Checked = true;\r
+}\r
+//---------------------------------------------------------------------------\r
+void __fastcall TNetworkDlg::FormHide( TObject *Sender )\r
+{\r
+    p_intfGlobal->p_sys->p_window->MenuNetworkStream->Checked = false;\r
+    p_intfGlobal->p_sys->p_window->PopupNetworkStream->Checked = false;\r
+}\r
+//---------------------------------------------------------------------------\r
+void __fastcall TNetworkDlg::BitBtnCancelClick( TObject *Sender )\r
+{\r
+    Hide();\r
+}\r
+//---------------------------------------------------------------------------\r
+void __fastcall TNetworkDlg::CheckBoxBroadcastClick( TObject *Sender )\r
+{\r
+    ComboBoxBroadcast->Enabled = NOT( ComboBoxBroadcast->Enabled );\r
+}\r
+//---------------------------------------------------------------------------\r
+void __fastcall TNetworkDlg::CheckBoxChannelClick( TObject *Sender )\r
+{\r
+    LabelAddress->Enabled = NOT( LabelAddress->Enabled );\r
+    ComboBoxAddress->Enabled = NOT( ComboBoxAddress->Enabled );\r
+    LabelPort->Enabled = NOT( LabelPort->Enabled );\r
+    EditPort->Enabled = NOT( EditPort->Enabled );\r
+    UpDownPort->Enabled = NOT( UpDownPort->Enabled );\r
+    CheckBoxBroadcast->Enabled = NOT( CheckBoxBroadcast->Enabled );\r
+    ComboBoxBroadcast->Enabled = ( NOT( ComboBoxBroadcast->Enabled ) &&\r
+                                   CheckBoxBroadcast->Checked );\r
+    ComboBoxChannel->Enabled = NOT( ComboBoxChannel->Enabled );\r
+    LabelPortCS->Enabled = NOT( LabelPortCS->Enabled );\r
+    EditPortCS->Enabled = NOT( EditPortCS->Enabled );\r
+    UpDownPortCS->Enabled = NOT( UpDownPortCS->Enabled );\r
+}\r
+//---------------------------------------------------------------------------\r
+void __fastcall TNetworkDlg::BitBtnOkClick( TObject *Sender )\r
+{\r
+    AnsiString      Source, Protocol, Server;\r
+    boolean_t       b_channel;\r
+    boolean_t       b_broadcast;\r
+    unsigned int    i_port;\r
+    int             i_end = p_main->p_playlist->i_size;\r
+\r
+    Hide();\r
+    Server = ComboBoxAddress->Text;\r
+\r
+    /* select added item */\r
+    if( p_input_bank->pp_input[0] != NULL )\r
+    {\r
+        p_input_bank->pp_input[0]->b_eof = 1;\r
+    }\r
+\r
+    /* Check which protocol was activated */\r
+    switch( RadioGroupProtocol->ItemIndex )\r
+    {\r
+        case 0:\r
+            Protocol = "udp";\r
+            break;\r
+        case 1:\r
+            intf_ErrMsg( "intf error: rtp protocol not yet implemented" );\r
+            return;\r
+        case 2:\r
+            Protocol = "http";\r
+            break;\r
+    }\r
+\r
+    /* Manage channel server */\r
+    b_channel = CheckBoxChannel->Checked ? TRUE : FALSE;\r
+    config_PutIntVariable( "network_channel", b_channel );\r
+    if( b_channel )\r
+    {\r
+        AnsiString      Channel = ComboBoxChannel->Text;\r
+        unsigned int    i_channel_port = UpDownPortCS->Position;\r
+\r
+        if( p_main->p_channel == NULL )\r
+        {\r
+            network_ChannelCreate();\r
+        }\r
+\r
+        config_PutPszVariable( "channel_server", Channel.c_str() );\r
+        if( i_channel_port < 65536 )\r
+        {\r
+            config_PutIntVariable( "channel_port", i_channel_port );\r
+        }\r
+\r
+        p_intfGlobal->p_sys->b_playing = 1;\r
+    }\r
+    else\r
+    {\r
+        /* Get the port number and make sure it will not\r
+         * overflow 5 characters */\r
+        i_port = UpDownPort->Position;\r
+        if( i_port > 65535 )\r
+        {\r
+            intf_ErrMsg( "intf error: invalid port %i", i_port );\r
+        }\r
+\r
+        /* do we have a broadcast address */\r
+        b_broadcast = CheckBoxBroadcast->Checked ? TRUE : FALSE;\r
+        if( b_broadcast )\r
+        {\r
+            AnsiString Broadcast = ComboBoxBroadcast->Text;\r
+\r
+            /* Build source name */\r
+            Source = Protocol + "://" + Server + "@:" + IntToStr( i_port )\r
+                     + "/" + Broadcast;\r
+        }\r
+        else\r
+        {\r
+            /* Build source name */\r
+            Source = Protocol + "://" + Server + "@:" + IntToStr( i_port );\r
+        }\r
+\r
+        intf_PlaylistAdd( p_main->p_playlist, PLAYLIST_END, Source.c_str() );\r
+        \r
+        /* update the display */\r
+        p_intfGlobal->p_sys->p_playlist->UpdateGrid( p_main->p_playlist );\r
+\r
+        intf_PlaylistJumpto( p_main->p_playlist, i_end - 1 );\r
+    }\r
+}\r
+//---------------------------------------------------------------------------\r
+\r
diff --git a/plugins/win32/network.dfm b/plugins/win32/network.dfm
new file mode 100644 (file)
index 0000000..4460414
--- /dev/null
@@ -0,0 +1,412 @@
+object NetworkDlg: TNetworkDlg\r
+  Left = 368\r
+  Top = 266\r
+  BorderStyle = bsDialog\r
+  Caption = 'Open network'\r
+  ClientHeight = 209\r
+  ClientWidth = 386\r
+  Color = clBtnFace\r
+  Font.Charset = DEFAULT_CHARSET\r
+  Font.Color = clWindowText\r
+  Font.Height = -11\r
+  Font.Name = 'MS Sans Serif'\r
+  Font.Style = []\r
+  Icon.Data = {\r
+    0000010001003030000001001800A81C00001600000028000000300000006000\r
+    00000100180000000000001B0000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000069375900000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000120E0A4011253E0F18000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000F0B\r
+    084143CA08070016430F08040800000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    00000000000000003127291203174647E8464AE808010840E54039E6390B0C06\r
+    0E0A1C0000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0070CD0079DD0079DD0070CD0000000000000000000C1008261D6E4647E54547\r
+    E64748E105040039E6393AE53939E63936D33308030100000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    000000000070CD0079DD0079DE007DE40088F9008CFF008CFF0088F9007CE302\r
+    6EC70B09124641DC4444DF4546E34446E54847E003040040E6403AEA3A3EE33E\r
+    3CE33C39E639080F010801050000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    00000000000000000070CD0079DD0077D90070CB0078D8007BDC007BDC007BDC\r
+    007BDC007BDC007BDD007EE32E232D0804084553F14250F34252ED4449DB4844\r
+    DC4645E208010540E5401C78150D18053CE63C3AE63A39EA393CD83C241A2006\r
+    0402000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000070CD0079DD007ADF007BDE007BDC0072\r
+    CC005188004877004876004876004876034976054A760B4D7731434221175B42\r
+    54EC4253EE4252F60B05104250F44252EB4546DA08010539E6392BAA2B080105\r
+    3CE63C39E7393AE63A39E93939E839081208181C080000000000000000000000\r
+    000000000000000000000000000000000000000070CD0079DD0079DD007CE300\r
+    88F90089F90075D2005188004877005188008CFF008CFF008CFF008CFF008CFF\r
+    1092FF2099FF31A0FF1408294840DB4550E1464EEA0C060B0B05084654F64653\r
+    F64453EF080E033AE63A2BAA2B03030339E33939DF3939E639080F083DDB3D24\r
+    9C24434B3B000000000000000000000000000000000000000000000000000000\r
+    0063B60085F3008BFE0088F9007FE90088F90080E8005CA0008CFF008CFF008C\r
+    FF008CFF008CFF008CFF008CFF048DFF1594FF259BFF35A2FF0C04103F38C754\r
+    5AF7505BF10C08100801084352F64652F44253F30813053AE63A39E639030403\r
+    1C521826A1250812010807032454131558150000000000000000000000000000\r
+    000000000000000000000000000000000000000070CD007CE30079DD00000000\r
+    7CE30089FA008CFF0089FA008CFF008CFF008CFF008CFF008CFF008CFF098FFF\r
+    1996FF2A9DFF3AA4FF0804103A2AA34E58F74E58F40B0B120803054652F34548\r
+    E64451F305130532CA323AE23A03070308070307040008040139E63939E43931\r
+    B42F5E1347000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000061B10000000079DD008CFF008CFF008CFF008CFF008C\r
+    FF008CFF008CFF008CFF008CFF0E91FF1E98FF2E9FFF3FA6FF040408382BAF4D\r
+    5AEF555AF70F12250501050F04160804074250F3121A123AE93A39E239080803\r
+    0D2F08010401268C2539E7393DE63D3FE23E0804100000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    79DD008CFF008CFF008CFF008CFF008CFF008CFF008CFF008CFF028CFF1293FF\r
+    239AFF33A1FF43A8FF0802083A2AA3565BF7555AF71714330501050104000801\r
+    07424FF12828203AEA3A39E639030703182F1008340801040139E7393DE83D39\r
+    E939080400000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000070CD0088F9008CFF008CFF008CFF008C\r
+    FF008CFF008CFF008CFF078EFF1795FF279CFF38A3FF48AAFF0808005151F155\r
+    5AF30804030804000504050800082E358E0E0C1F1D192439E53940E640080400\r
+    2AA12739E63908020708010539E8393BE93B0804080000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000007CE3008CFF008CFF008CFF058EFD1D96F92398F8269AFA31A0FC42A8FF\r
+    4FAEFF5CB3FF65B7FF0C08084F5AF14E57F50B04080804043639A54647E81C13\r
+    49363AA70804080F120835953439E7393EE63E39DF3939EA39081105308A2B3F\r
+    E73F080601000000000000000000000000000000000000000000000000000000\r
+    000000000000000000000000000000000000047BDB1D96F92398F82498F83BA0\r
+    F399C1E1B1C9DDBCD4E7CBE0F3D9EDFFDCEEFFDEEFFFCDE8FF080808575BF750\r
+    58F624125A5057F34845DF4A41E0150E30C55734E3723EC56E33A23D27050105\r
+    39E43939E63939E6393CE63C14420C3BE03B192A090000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000004\r
+    04042D88D399C1E1B1C9DDB1C9DCB7CBDBCFD3D7D5D5D6E2E2E3F0F0F1FEFEFF\r
+    FEFEFFFEFEFFF9FCFF0C08085D61F15B61EF555AF64A4FE13937BB0E0A12DE74\r
+    39E1733CDE713CDF753AE67541C36B342C231F17141B3AE63A39E7393DE83D39\r
+    E93939DE39000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000001818186893B8C3CCD2D5D5D6D5D5D6D5D5\r
+    D6D6D6D6D6D6D6E3E3E3F1F1F1FFFFFFFFFFFFFFFFFFFFFFFF140C145C5EF668\r
+    63F75555EA10061CC3673FDF713A0C1104080403080105080007070407D56F36\r
+    DE743EDE72401C200C29452939E63939E73939EA390000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000343434A2B4C2D5D5D6D6D6D6D6D6D6D6D6D6D5D5D6E2E2E3F0F0F1FEFEFF\r
+    FEFEFFFEFEFFFEFEFF20161C5C5EF6373EAE0E0413E2713DE1763CCD6A3C2A0D\r
+    08A44B2CDE743EBD612F080401030403E1713CDE7239DE713AE1723C22201139\r
+    C13341E641000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000001B1B1B99AEBED5D5D6D5D5D6D5D5\r
+    D6CFD3D7B8CBDBBFD5E7CEE2F3DCEFFFDFF0FFE2F1FFE9F4FF10100C3639A46E\r
+    4540DE7239DE713DE1713C07000784261CDE7639E3743E0812001F0407D86E36\r
+    E3753EE57540E57541DE763CDE733DD26637493C387E2F7B0000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    00001B1B1B99AEBFCED3D7B7CBDBB1C9DD99C1E140A2F339A2FA49AAFC59B2FF\r
+    66B8FF74BEFF92CBFFD9ECFF0F0402C66531DE7139E2733D854B1E0A01084D11\r
+    0DE3733EE1723CDF713ADF753AE1763C1D0A08290708E57140E1763CDE733DC7\r
+    6B34080408000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000001818187FA5C399C1E13BA0F32498\r
+    F81D96F91091FD1C97FF2C9EFF3CA5FF4DACFF5DB3FF71BBFF8DC8FF9FD0FF08\r
+    0400080406B95C2EDE7239070B070803014D1615DE723CDE7540E5714030090D\r
+    0504003A120FE67541DE75390808044A0C290000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    00000707071778C81C92F3058EFD008CFF008CFF1092FF2099FF31A0FF41A7FF\r
+    51AEFF62B5FF72BCFF7BBFFF7BBBF96E9FCD0808080806041D0508E571403E22\r
+    0C200708080405070407070007080303B05F31DE723967301908010500000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    000000000000000000000000000000000000000000000000007CE3008CFF008C\r
+    FF048DFF1594FF259BFF35A2FF46A9FF56B0FF66B7FF77BEFF7BBFFF6DAAE300\r
+    0000000000000000000000080401200C088D4024E17141E57140DF713ADE713E\r
+    DE76390801070000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    00000000000000000079DD008CFF008CFF098FFF1996FF2A9DFF3AA4FF4AABFF\r
+    5BB2FF6BB9FF7BBFFF7BBFFF6AA5DD0000000000000000000000000000001D1A\r
+    0C1A0F08110903441912E57140623B1E08020300000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000079DD008CFF008C\r
+    FF0E91FF1E98FF2E9FFF3FA6FF4FADFF5FB4FF70BBFF7BBFFF78BAF96299CD00\r
+    00000000000000000000000000000000000000003914100000005A2411000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    00000000000000000070CD0088F9078EFD2C9CF940A3F850ACFA60B4FC70BCFF\r
+    7DC2FF87C6FF7EC0FF6DAAE30000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000707071A85DD40A2\r
+    F3A0C3E1B7CBDDC6D8E7D4E5F3E2F1FFE5F2FFD9ECFF9FD0FF7AACDD05050500\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    00000000000000001818187FA5C3B8CBDBD0D4D7D5D5D6E2E2E3F0F0F1FEFEFF\r
+    FEFEFFFAFCFFE2EDF99FB7CD1C1C1C0000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000001B1B1B99AEBFD4D5\r
+    D6D6D6D6D6D6D6E3E3E3F1F1F1FFFFFFFFFFFFFEFEFFD1DAE33E3E3E00000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    00000000000000001D1D1D7B9BB4CACED1D6D6D6D5D5D6E2E2E3F0F0F1FEFEFF\r
+    FEFEFFFEFEFFC9D2DD2121210000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    000000000000000000000000000000000000000000000000000000343434A5B5\r
+    C2CFD3D7BFCEDBC9D9E7D7E6F3E6F3FFECF5FFF0F4F9AEBDCD23232300000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    000000000000000000000018181887A8C3A6C6E169B3F367B6FA77BEFC88C6FF\r
+    9FD0FFB4CBE33939390000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    000000000000000000000000000000000000000000000000000000040404338C\r
+    D749A8F947A9FD54AFFF64B6FF74BDFF7EC0FF76ABDD05050500000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    00000000000000000000000000001F7DCD369FF948AAFF58B1FF69B8FF79BFFF\r
+    78BAF96299CD0000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    003592E34DACFF5DB3FF6DBAFF7BBFFF6DAAE300000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    00000000000000000000000000000000003890DD51AEFF62B5FF72BCFF7BBFFF\r
+    6AA5DD0000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    003B8FD84C9CE3589FDE69A9E375B6F46299CD00000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    00000000000000000000000000000000003376B00000000000000000005788B6\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    00000000006CC61A83DD247FCC00000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000006DC71A83DD2686D71F6EB1\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    000000000000000000000000000000000000000000000000000000000000FFFF\r
+    FFFFFFFF0000FFFFFFFFFFFF0000FFFFFE1FDFFF0000FFFFE0078FFF0000FFFE\r
+    000007FF0000FFF0000001FF0000FF80000000FF0000FF000000003F0000FF00\r
+    0000000F0000FE00000000070000F800000000070000F8000000000F0000FC00\r
+    000000070000FE00000000070000FF80000000070000FFC0000000070000FFE0\r
+    000000070000FFE0000000070000FFE0000000070000FFE0000000070000FFF0\r
+    000000070000FFF0000000030000FFF0000000070000FFF00000000F0000FFF0\r
+    0000003F0000FFF8000E00FF0000FFF8000F01FF0000FFF8000FD7FF0000FFF8\r
+    001FFFFF0000FFFC001FFFFF0000FFFC001FFFFF0000FFFC003FFFFF0000FFFC\r
+    003FFFFF0000FFFE003FFFFF0000FFFE007FFFFF0000FFFE007FFFFF0000FFFE\r
+    007FFFFF0000FFFF00FFFFFF0000FFFF00FFFFFF0000FFFF00FFFFFF0000FFFF\r
+    01FFFFFF0000FFFF01FFFFFF0000FFFF81FFFFFF0000FFFFC3FFFFFF0000FFFF\r
+    FFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000}\r
+  OldCreateOrder = False\r
+  OnHide = FormHide\r
+  OnShow = FormShow\r
+  PixelsPerInch = 96\r
+  TextHeight = 13\r
+  object RadioGroupProtocol: TRadioGroup\r
+    Left = 8\r
+    Top = 8\r
+    Width = 89\r
+    Height = 97\r
+    Caption = 'Protocol'\r
+    ItemIndex = 0\r
+    Items.Strings = (\r
+      'TS'\r
+      'RTP'\r
+      'HTTP')\r
+    TabOrder = 0\r
+  end\r
+  object GroupBoxServer: TGroupBox\r
+    Left = 104\r
+    Top = 8\r
+    Width = 273\r
+    Height = 97\r
+    Caption = 'Server'\r
+    TabOrder = 1\r
+    object LabelAddress: TLabel\r
+      Left = 16\r
+      Top = 20\r
+      Width = 38\r
+      Height = 13\r
+      Caption = 'Address'\r
+    end\r
+    object LabelPort: TLabel\r
+      Left = 16\r
+      Top = 46\r
+      Width = 19\r
+      Height = 13\r
+      Caption = 'Port'\r
+    end\r
+    object CheckBoxBroadcast: TCheckBox\r
+      Left = 16\r
+      Top = 72\r
+      Width = 73\r
+      Height = 17\r
+      Caption = 'Broadcast'\r
+      TabOrder = 0\r
+      OnClick = CheckBoxBroadcastClick\r
+    end\r
+    object EditPort: TEdit\r
+      Left = 96\r
+      Top = 42\r
+      Width = 145\r
+      Height = 21\r
+      TabOrder = 1\r
+      Text = '1234'\r
+    end\r
+    object ComboBoxAddress: TComboBox\r
+      Left = 96\r
+      Top = 16\r
+      Width = 161\r
+      Height = 21\r
+      ItemHeight = 13\r
+      TabOrder = 2\r
+      Text = '138.195.131.10'\r
+    end\r
+    object ComboBoxBroadcast: TComboBox\r
+      Left = 96\r
+      Top = 70\r
+      Width = 161\r
+      Height = 21\r
+      Enabled = False\r
+      ItemHeight = 13\r
+      TabOrder = 3\r
+      Text = '138.195.143.255'\r
+    end\r
+    object UpDownPort: TUpDown\r
+      Left = 241\r
+      Top = 42\r
+      Width = 15\r
+      Height = 21\r
+      Associate = EditPort\r
+      Min = 0\r
+      Max = 32767\r
+      Position = 1234\r
+      TabOrder = 4\r
+      Thousands = False\r
+      Wrap = False\r
+    end\r
+  end\r
+  object GroupBoxChannels: TGroupBox\r
+    Left = 8\r
+    Top = 112\r
+    Width = 369\r
+    Height = 57\r
+    Caption = 'Channels'\r
+    TabOrder = 2\r
+    object LabelPortCS: TLabel\r
+      Left = 268\r
+      Top = 26\r
+      Width = 19\r
+      Height = 13\r
+      Caption = 'Port'\r
+      Enabled = False\r
+    end\r
+    object CheckBoxChannel: TCheckBox\r
+      Left = 8\r
+      Top = 24\r
+      Width = 97\r
+      Height = 17\r
+      Caption = 'Channel server'\r
+      TabOrder = 0\r
+      OnClick = CheckBoxChannelClick\r
+    end\r
+    object ComboBoxChannel: TComboBox\r
+      Left = 112\r
+      Top = 22\r
+      Width = 137\r
+      Height = 21\r
+      Enabled = False\r
+      ItemHeight = 13\r
+      TabOrder = 1\r
+      Text = '138.195.156.232'\r
+    end\r
+    object EditPortCS: TEdit\r
+      Left = 296\r
+      Top = 22\r
+      Width = 41\r
+      Height = 21\r
+      Enabled = False\r
+      TabOrder = 2\r
+      Text = '6 010'\r
+    end\r
+    object UpDownPortCS: TUpDown\r
+      Left = 337\r
+      Top = 22\r
+      Width = 15\r
+      Height = 21\r
+      Associate = EditPortCS\r
+      Enabled = False\r
+      Min = 0\r
+      Max = 32767\r
+      Position = 6010\r
+      TabOrder = 3\r
+      Wrap = False\r
+    end\r
+  end\r
+  object BitBtnOk: TBitBtn\r
+    Left = 8\r
+    Top = 176\r
+    Width = 177\r
+    Height = 25\r
+    Caption = 'OK'\r
+    Default = True\r
+    ModalResult = 1\r
+    TabOrder = 3\r
+    OnClick = BitBtnOkClick\r
+  end\r
+  object BitBtnCancel: TBitBtn\r
+    Left = 200\r
+    Top = 176\r
+    Width = 177\r
+    Height = 25\r
+    Caption = 'Cancel'\r
+    ModalResult = 2\r
+    TabOrder = 4\r
+    OnClick = BitBtnCancelClick\r
+  end\r
+end\r
diff --git a/plugins/win32/network.h b/plugins/win32/network.h
new file mode 100644 (file)
index 0000000..d268b74
--- /dev/null
@@ -0,0 +1,68 @@
+/*****************************************************************************\r
+ * network.h: the "network" dialog box\r
+ *****************************************************************************\r
+ * Copyright (C) 2002 VideoLAN\r
+ *\r
+ * Authors: Olivier Teuliere <ipkiss@via.ecp.fr>\r
+ *\r
+ * This program is free software; you can redistribute it and/or modify\r
+ * it under the terms of the GNU General Public License as published by\r
+ * the Free Software Foundation; either version 2 of the License, or\r
+ * (at your option) any later version.\r
+ * \r
+ * This program is distributed in the hope that it will be useful,\r
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
+ * GNU General Public License for more details.\r
+ *\r
+ * You should have received a copy of the GNU General Public License\r
+ * along with this program; if not, write to the Free Software\r
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111, USA.\r
+ *****************************************************************************/\r
+\r
+#ifndef networkH\r
+#define networkH\r
+//---------------------------------------------------------------------------\r
+#include <Classes.hpp>\r
+#include <Controls.hpp>\r
+#include <StdCtrls.hpp>\r
+#include <Forms.hpp>\r
+#include <Buttons.hpp>\r
+#include <ComCtrls.hpp>\r
+#include <ExtCtrls.hpp>\r
+//---------------------------------------------------------------------------\r
+\r
+#define NOT( var ) ( (var) ? false : true )\r
+\r
+class TNetworkDlg : public TForm\r
+{\r
+__published:   // IDE-managed Components\r
+    TRadioGroup *RadioGroupProtocol;\r
+    TGroupBox *GroupBoxServer;\r
+    TLabel *LabelAddress;\r
+    TLabel *LabelPort;\r
+    TCheckBox *CheckBoxBroadcast;\r
+    TEdit *EditPort;\r
+    TComboBox *ComboBoxAddress;\r
+    TComboBox *ComboBoxBroadcast;\r
+    TUpDown *UpDownPort;\r
+    TGroupBox *GroupBoxChannels;\r
+    TLabel *LabelPortCS;\r
+    TCheckBox *CheckBoxChannel;\r
+    TComboBox *ComboBoxChannel;\r
+    TEdit *EditPortCS;\r
+    TUpDown *UpDownPortCS;\r
+    TBitBtn *BitBtnOk;\r
+    TBitBtn *BitBtnCancel;\r
+    void __fastcall FormShow( TObject *Sender );\r
+    void __fastcall FormHide( TObject *Sender );\r
+    void __fastcall BitBtnCancelClick(TObject *Sender);\r
+    void __fastcall CheckBoxBroadcastClick( TObject *Sender );\r
+    void __fastcall CheckBoxChannelClick( TObject *Sender );\r
+    void __fastcall BitBtnOkClick(TObject *Sender);\r
+private:       // User declarations\r
+public:                // User declarations\r
+    __fastcall TNetworkDlg( TComponent* Owner );\r
+};\r
+//---------------------------------------------------------------------------\r
+#endif\r
diff --git a/plugins/win32/playlist.cpp b/plugins/win32/playlist.cpp
new file mode 100644 (file)
index 0000000..30eac76
--- /dev/null
@@ -0,0 +1,379 @@
+/*****************************************************************************\r
+ * playlist.cpp: Interface for the playlist dialog\r
+ *****************************************************************************\r
+ * Copyright (C) 2002 VideoLAN\r
+ *\r
+ * Authors: Olivier Teuliere <ipkiss@via.ecp.fr>\r
+ *\r
+ * This program is free software; you can redistribute it and/or modify\r
+ * it under the terms of the GNU General Public License as published by\r
+ * the Free Software Foundation; either version 2 of the License, or\r
+ * (at your option) any later version.\r
+ * \r
+ * This program is distributed in the hope that it will be useful,\r
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
+ * GNU General Public License for more details.\r
+ *\r
+ * You should have received a copy of the GNU General Public License\r
+ * along with this program; if not, write to the Free Software\r
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111, USA.\r
+ *****************************************************************************/\r
+\r
+#include <vcl.h>\r
+#pragma hdrstop\r
+\r
+#include <videolan/vlc.h>\r
+\r
+#include "stream_control.h"\r
+#include "input_ext-intf.h"\r
+\r
+#include "interface.h"\r
+#include "intf_playlist.h"\r
+#include "win32_common.h"\r
+\r
+#include "playlist.h"\r
+//---------------------------------------------------------------------------\r
+//#pragma package(smart_init)\r
+#pragma resource "*.dfm"\r
+\r
+extern  struct intf_thread_s *p_intfGlobal;\r
+\r
+//---------------------------------------------------------------------------\r
+__fastcall TPlaylistDlg::TPlaylistDlg( TComponent* Owner )\r
+        : TForm( Owner )\r
+{\r
+    Icon = p_intfGlobal->p_sys->p_window->Icon;\r
+}\r
+//---------------------------------------------------------------------------\r
+char * __fastcall TPlaylistDlg::rindex( char *s, char c )\r
+{\r
+    char *ref = s;\r
+\r
+    s = s + strlen( s ) - 2;\r
+    while( ( s > ref ) && ( *s != c ) )\r
+    {\r
+        s--;\r
+    }\r
+    if( *s == c )\r
+    {\r
+        return( s );\r
+    }\r
+    else\r
+    {\r
+        return( NULL );\r
+    }\r
+}\r
+//---------------------------------------------------------------------------\r
+\r
+\r
+/*****************************************************************************\r
+ * Event handlers\r
+ ****************************************************************************/\r
+void __fastcall TPlaylistDlg::FormShow( TObject *Sender )\r
+{\r
+    p_intfGlobal->p_sys->p_window->MenuPlaylist->Checked = true;\r
+    p_intfGlobal->p_sys->p_window->PopupPlaylist->Checked = true;\r
+}\r
+//---------------------------------------------------------------------------\r
+void __fastcall TPlaylistDlg::FormHide( TObject *Sender )\r
+{\r
+    p_intfGlobal->p_sys->p_window->MenuPlaylist->Checked = false;\r
+    p_intfGlobal->p_sys->p_window->PopupPlaylist->Checked = false;\r
+}\r
+//---------------------------------------------------------------------------\r
+void __fastcall TPlaylistDlg::BitBtnOkClick( TObject *Sender )\r
+{\r
+    Hide();\r
+}\r
+//---------------------------------------------------------------------------\r
+void __fastcall TPlaylistDlg::ListViewPlaylistDblClick( TObject *Sender )\r
+{\r
+    TListItem *Item;\r
+    TListItem *ItemStart;\r
+    TItemStates Focused;\r
+\r
+    /* search the selected item */\r
+    if( ListViewPlaylist->SelCount > 0 )\r
+    {\r
+        if( ListViewPlaylist->SelCount == 1 )\r
+        {\r
+            Item = ListViewPlaylist->Selected;\r
+        }\r
+        else\r
+        {\r
+            Focused << isFocused;\r
+            ItemStart = ListViewPlaylist->Items->Item[0];\r
+\r
+            Item = ListViewPlaylist->GetNextItem( ItemStart, sdAll, Focused );\r
+        }\r
+\r
+        /* stop current item, select the good one */\r
+        if( ( p_input_bank->pp_input[0] != NULL ) &&\r
+            ( Item->Index != p_intfGlobal->p_sys->i_playing ) )\r
+        {\r
+            /* FIXME: temporary hack */\r
+            p_input_bank->pp_input[0]->b_eof = 1;\r
+        }\r
+        intf_PlaylistJumpto( p_main->p_playlist, Item->Index - 1 );\r
+    }\r
+}\r
+//---------------------------------------------------------------------------\r
+void __fastcall TPlaylistDlg::ListViewPlaylistKeyDown( TObject *Sender,\r
+        WORD &Key, TShiftState Shift )\r
+{\r
+    /* 'suppr' or 'backspace' */\r
+    if( ( Key == VK_DELETE ) || ( Key == VK_BACK ) )\r
+    {\r
+        MenuDeleteSelectedClick( Sender );\r
+    }\r
+\r
+    /* 'enter' */\r
+    if( Key == VK_RETURN )\r
+    {\r
+        PopupPlayClick( Sender );\r
+    }\r
+}\r
+//---------------------------------------------------------------------------\r
+void __fastcall TPlaylistDlg::ListViewPlaylistCustomDrawItem(\r
+        TCustomListView *Sender, TListItem *Item, TCustomDrawState State,\r
+        bool &DefaultDraw)\r
+{\r
+    TRect Rect = Item->DisplayRect( drBounds );\r
+\r
+    /* set the background color */\r
+    if( Item->Index == p_intfGlobal->p_sys->i_playing )\r
+    {\r
+        Sender->Canvas->Brush->Color = clRed;\r
+    }\r
+    else\r
+    {\r
+        Sender->Canvas->Brush->Color = clWhite;\r
+    }\r
+\r
+    Sender->Canvas->FillRect( Rect );\r
+}\r
+//---------------------------------------------------------------------------\r
+\r
+\r
+/*****************************************************************************\r
+ * Menu callbacks\r
+ ****************************************************************************/\r
+void __fastcall TPlaylistDlg::MenuAddFileClick( TObject *Sender )\r
+{\r
+    p_intfGlobal->p_sys->p_window->MenuOpenFileClick( Sender );\r
+}\r
+//---------------------------------------------------------------------------\r
+void __fastcall TPlaylistDlg::MenuAddDiscClick( TObject *Sender )\r
+{\r
+    p_intfGlobal->p_sys->p_window->MenuOpenDiscClick( Sender );\r
+}\r
+//---------------------------------------------------------------------------\r
+void __fastcall TPlaylistDlg::MenuAddNetClick( TObject *Sender )\r
+{\r
+    p_intfGlobal->p_sys->p_window->MenuNetworkStreamClick( Sender );\r
+}\r
+//---------------------------------------------------------------------------\r
+void __fastcall TPlaylistDlg::MenuAddUrlClick( TObject *Sender )\r
+{\r
+    /* TODO */\r
+}\r
+//---------------------------------------------------------------------------\r
+void __fastcall TPlaylistDlg::MenuDeleteSelectedClick( TObject *Sender )\r
+{\r
+    /* user wants to delete a file in the queue */\r
+    int         i_pos;\r
+    playlist_t *p_playlist = p_main->p_playlist;\r
+\r
+    /* lock the struct */\r
+    vlc_mutex_lock( &p_intfGlobal->change_lock );\r
+\r
+    /* delete the items from the last to the first */\r
+    for( i_pos = p_playlist->i_size - 1; i_pos >= 0; i_pos-- )\r
+    {\r
+        if( ListViewPlaylist->Items->Item[i_pos]->Selected )\r
+        {\r
+            DeleteItem( i_pos );\r
+        }\r
+    }\r
+\r
+    /* Rebuild the ListView */\r
+    UpdateGrid( p_playlist );\r
+\r
+    vlc_mutex_unlock( &p_intfGlobal->change_lock );\r
+}\r
+//---------------------------------------------------------------------------\r
+void __fastcall TPlaylistDlg::MenuDeleteAllClick( TObject *Sender )\r
+{\r
+    int         i_pos;\r
+    playlist_t *p_playlist = p_main->p_playlist;\r
+\r
+    /* lock the struct */\r
+    vlc_mutex_lock( &p_intfGlobal->change_lock );\r
+\r
+    /* delete the items from the last to the first */\r
+    for( i_pos = p_playlist->i_size - 1; i_pos >= 0; i_pos-- )\r
+    {\r
+        DeleteItem( i_pos );\r
+    }\r
+\r
+    /* Rebuild the ListView */\r
+    UpdateGrid( p_playlist );\r
+\r
+    vlc_mutex_unlock( &p_intfGlobal->change_lock );\r
+}\r
+//---------------------------------------------------------------------------\r
+void __fastcall TPlaylistDlg::MenuSelectionInvertClick( TObject *Sender )\r
+{\r
+#define NOT( var ) ( (var) ? false : true )\r
+    int         i_pos;\r
+    playlist_t *p_playlist = p_main->p_playlist;\r
+    TListItems *Items = ListViewPlaylist->Items;\r
+\r
+    /* delete the items from the last to the first */\r
+    for( i_pos = p_playlist->i_size - 1; i_pos >= 0; i_pos-- )\r
+    {\r
+        Items->Item[i_pos]->Selected = NOT( Items->Item[i_pos]->Selected );\r
+    }\r
+#undef NOT\r
+}\r
+//---------------------------------------------------------------------------\r
+void __fastcall TPlaylistDlg::MenuSelectionCropClick( TObject *Sender )\r
+{\r
+    MenuSelectionInvertClick( Sender );\r
+    MenuDeleteSelectedClick( Sender );\r
+}\r
+//---------------------------------------------------------------------------\r
+\r
+\r
+/*****************************************************************************\r
+ * Popup callbacks\r
+ ****************************************************************************/\r
+void __fastcall TPlaylistDlg::PopupPlayClick( TObject *Sender )\r
+{\r
+    ListViewPlaylistDblClick( Sender );\r
+}\r
+//---------------------------------------------------------------------------\r
+void __fastcall TPlaylistDlg::PopupInvertSelectionClick( TObject *Sender )\r
+{\r
+    MenuSelectionInvertClick( Sender );\r
+}\r
+//---------------------------------------------------------------------------\r
+void __fastcall TPlaylistDlg::PopupCropSelectionClick( TObject *Sender )\r
+{\r
+    MenuSelectionCropClick( Sender );\r
+}\r
+//---------------------------------------------------------------------------\r
+void __fastcall TPlaylistDlg::PopupDeleteSelectedClick( TObject *Sender )\r
+{\r
+    MenuDeleteSelectedClick( Sender );\r
+}\r
+//---------------------------------------------------------------------------\r
+void __fastcall TPlaylistDlg::PopupDeleteAllClick( TObject *Sender )\r
+{\r
+    MenuDeleteAllClick( Sender );\r
+}\r
+//---------------------------------------------------------------------------\r
+\r
+\r
+/*****************************************************************************\r
+ * Useful functions, needed by the event handlers\r
+ ****************************************************************************/\r
+void __fastcall TPlaylistDlg::UpdateGrid( playlist_t * p_playlist )\r
+{\r
+    int i_dummy;\r
+    char *FileName;\r
+    TListItem *Item;\r
+\r
+    ListViewPlaylist->Items->BeginUpdate();\r
+\r
+    /* Clear the list... */\r
+    ListViewPlaylist->Items->Clear();\r
+\r
+    /* ...and rebuild it */\r
+    for( i_dummy = 0; i_dummy < p_playlist->i_size; i_dummy++ )\r
+    {\r
+#ifdef WIN32\r
+        /* Position of the last '\' in the string */\r
+        FileName = rindex( p_playlist->p_item[i_dummy].psz_name, '\\' );\r
+#else\r
+        /* Position of the last '/' in the string */\r
+        FileName = rindex( p_playlist->p_item[i_dummy].psz_name, '/' );\r
+#endif\r
+        if( ( FileName == NULL ) || ( *(FileName + 1) == '\0' ) )\r
+        {\r
+            FileName = p_playlist->p_item[i_dummy].psz_name;\r
+        }\r
+        else\r
+        {\r
+            /* Skip leading '\' or '/' */\r
+            FileName++;\r
+        }\r
+\r
+        Item = ListViewPlaylist->Items->Add();\r
+        Item->Caption = FileName;\r
+        Item->SubItems->Add( "no info" );\r
+    }\r
+    /* TODO: Set background color ? */\r
+\r
+    ListViewPlaylist->Items->EndUpdate();\r
+}\r
+//---------------------------------------------------------------------------\r
+void __fastcall TPlaylistDlg::Manage( intf_thread_t * p_intf )\r
+{\r
+    playlist_t *p_playlist = p_main->p_playlist ;\r
+\r
+    vlc_mutex_lock( &p_playlist->change_lock );\r
+\r
+    if( p_intf->p_sys->i_playing != p_playlist->i_index )\r
+    {\r
+        p_intf->p_sys->i_playing = p_playlist->i_index;\r
+\r
+        /* update the background color */\r
+        UpdateGrid( p_playlist );\r
+    }\r
+\r
+    vlc_mutex_unlock( &p_playlist->change_lock );\r
+}\r
+//---------------------------------------------------------------------------\r
+void __fastcall TPlaylistDlg::DeleteItem( int i_pos )\r
+{\r
+    intf_PlaylistDelete( p_main->p_playlist, i_pos );\r
+\r
+    /* are we deleting the current played stream */\r
+    if( p_intfGlobal->p_sys->i_playing == i_pos )\r
+    {\r
+        /* next ! */\r
+        p_input_bank->pp_input[0]->b_eof = 1;\r
+        /* this has to set the slider to 0 */\r
+        \r
+        /* step minus one */\r
+        p_intfGlobal->p_sys->i_playing-- ;\r
+\r
+        vlc_mutex_lock( &p_main->p_playlist->change_lock );\r
+        p_main->p_playlist->i_index-- ;\r
+        vlc_mutex_unlock( &p_main->p_playlist->change_lock );\r
+    }\r
+}\r
+//---------------------------------------------------------------------------\r
+void __fastcall TPlaylistDlg::Previous()\r
+{\r
+    if( p_input_bank->pp_input[0] != NULL )\r
+    {\r
+        /* FIXME: temporary hack */\r
+        intf_PlaylistPrev( p_main->p_playlist );\r
+        intf_PlaylistPrev( p_main->p_playlist );\r
+        p_input_bank->pp_input[0]->b_eof = 1;\r
+    }\r
+}\r
+//---------------------------------------------------------------------------\r
+void __fastcall TPlaylistDlg::Next()\r
+{\r
+    if( p_input_bank->pp_input[0] != NULL )\r
+    {\r
+        /* FIXME: temporary hack */\r
+        p_input_bank->pp_input[0]->b_eof = 1;\r
+    }\r
+}\r
+//---------------------------------------------------------------------------\r
+\r
diff --git a/plugins/win32/playlist.dfm b/plugins/win32/playlist.dfm
new file mode 100644 (file)
index 0000000..0e8c535
--- /dev/null
@@ -0,0 +1,133 @@
+object PlaylistDlg: TPlaylistDlg\r
+  Left = 447\r
+  Top = 197\r
+  Width = 335\r
+  Height = 436\r
+  Caption = 'Playlist'\r
+  Color = clBtnFace\r
+  Font.Charset = DEFAULT_CHARSET\r
+  Font.Color = clWindowText\r
+  Font.Height = -11\r
+  Font.Name = 'MS Sans Serif'\r
+  Font.Style = []\r
+  Menu = MainMenuPlaylist\r
+  OldCreateOrder = False\r
+  OnHide = FormHide\r
+  OnShow = FormShow\r
+  PixelsPerInch = 96\r
+  TextHeight = 13\r
+  object BitBtnOk: TBitBtn\r
+    Left = 76\r
+    Top = 356\r
+    Width = 176\r
+    Height = 25\r
+    Anchors = [akBottom]\r
+    Caption = 'OK'\r
+    ModalResult = 1\r
+    TabOrder = 0\r
+    OnClick = BitBtnOkClick\r
+  end\r
+  object ListViewPlaylist: TListView\r
+    Left = 11\r
+    Top = 10\r
+    Width = 305\r
+    Height = 331\r
+    Anchors = [akTop, akBottom]\r
+    Columns = <\r
+      item\r
+        Caption = 'Filename'\r
+        Width = 200\r
+      end\r
+      item\r
+        Alignment = taCenter\r
+        Caption = 'Duration'\r
+        Width = 100\r
+      end>\r
+    HideSelection = False\r
+    MultiSelect = True\r
+    ReadOnly = True\r
+    RowSelect = True\r
+    PopupMenu = PopupMenuPlaylist\r
+    TabOrder = 1\r
+    ViewStyle = vsReport\r
+    OnCustomDrawItem = ListViewPlaylistCustomDrawItem\r
+    OnDblClick = ListViewPlaylistDblClick\r
+    OnKeyDown = ListViewPlaylistKeyDown\r
+  end\r
+  object MainMenuPlaylist: TMainMenu\r
+    Left = 24\r
+    Top = 352\r
+    object MenuAdd: TMenuItem\r
+      Caption = '&Add'\r
+      object MenuAddFile: TMenuItem\r
+        Caption = '&File'\r
+        OnClick = MenuAddFileClick\r
+      end\r
+      object MenuAddDisc: TMenuItem\r
+        Caption = '&Disc'\r
+        OnClick = MenuAddDiscClick\r
+      end\r
+      object MenuAddNet: TMenuItem\r
+        Caption = '&Network'\r
+        OnClick = MenuAddNetClick\r
+      end\r
+      object MenuAddUrl: TMenuItem\r
+        Caption = '&Url'\r
+        Enabled = False\r
+        OnClick = MenuAddUrlClick\r
+      end\r
+    end\r
+    object MenuDelete: TMenuItem\r
+      Caption = '&Delete'\r
+      object MenuDeleteAll: TMenuItem\r
+        Caption = '&All'\r
+        OnClick = MenuDeleteAllClick\r
+      end\r
+      object MenuDeleteSelected: TMenuItem\r
+        Caption = '&Selected'\r
+        OnClick = MenuDeleteSelectedClick\r
+      end\r
+    end\r
+    object MenuSelection: TMenuItem\r
+      Caption = '&Selection'\r
+      object MenuSelectionCrop: TMenuItem\r
+        Caption = '&Crop'\r
+        OnClick = MenuSelectionCropClick\r
+      end\r
+      object MenuSelectionInvert: TMenuItem\r
+        Caption = '&Invert'\r
+        OnClick = MenuSelectionInvertClick\r
+      end\r
+    end\r
+  end\r
+  object PopupMenuPlaylist: TPopupMenu\r
+    Left = 272\r
+    Top = 352\r
+    object PopupPlay: TMenuItem\r
+      Caption = '&Play'\r
+      OnClick = PopupPlayClick\r
+    end\r
+    object N1: TMenuItem\r
+      Caption = '-'\r
+    end\r
+    object PopupInvertSelection: TMenuItem\r
+      Caption = '&Invert selection'\r
+      OnClick = PopupInvertSelectionClick\r
+    end\r
+    object PopupCropSelection: TMenuItem\r
+      Caption = '&Crop selection'\r
+      OnClick = PopupCropSelectionClick\r
+    end\r
+    object N2: TMenuItem\r
+      Caption = '-'\r
+    end\r
+    object PopupDeleteSelected: TMenuItem\r
+      Caption = '&Delete selected'\r
+      OnClick = PopupDeleteSelectedClick\r
+    end\r
+    object PopupDeleteAll: TMenuItem\r
+      Caption = 'Delete &all'\r
+      OnClick = PopupDeleteAllClick\r
+    end\r
+  end\r
+end\r
diff --git a/plugins/win32/playlist.h b/plugins/win32/playlist.h
new file mode 100644 (file)
index 0000000..3b9e932
--- /dev/null
@@ -0,0 +1,96 @@
+/*****************************************************************************\r
+ * playlist.h: Interface for the playlist dialog\r
+ *****************************************************************************\r
+ * Copyright (C) 2002 VideoLAN\r
+ *\r
+ * Authors: Olivier Teuliere <ipkiss@via.ecp.fr>\r
+ *\r
+ * This program is free software; you can redistribute it and/or modify\r
+ * it under the terms of the GNU General Public License as published by\r
+ * the Free Software Foundation; either version 2 of the License, or\r
+ * (at your option) any later version.\r
+ * \r
+ * This program is distributed in the hope that it will be useful,\r
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
+ * GNU General Public License for more details.\r
+ *\r
+ * You should have received a copy of the GNU General Public License\r
+ * along with this program; if not, write to the Free Software\r
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111, USA.\r
+ *****************************************************************************/\r
+\r
+#ifndef playlistH\r
+#define playlistH\r
+//---------------------------------------------------------------------------\r
+#include <Classes.hpp>\r
+#include <Controls.hpp>\r
+#include <StdCtrls.hpp>\r
+#include <Forms.hpp>\r
+#include <Buttons.hpp>\r
+#include <Menus.hpp>\r
+#include <Grids.hpp>\r
+#include <ComCtrls.hpp>\r
+\r
+struct playlist_s;\r
+struct intf_thread_s;\r
+\r
+//---------------------------------------------------------------------------\r
+class TPlaylistDlg : public TForm\r
+{\r
+__published:   // IDE-managed Components\r
+    TBitBtn *BitBtnOk;\r
+    TMainMenu *MainMenuPlaylist;\r
+    TMenuItem *MenuAdd;\r
+    TMenuItem *MenuAddFile;\r
+    TMenuItem *MenuAddDisc;\r
+    TMenuItem *MenuAddNet;\r
+    TMenuItem *MenuAddUrl;\r
+    TMenuItem *MenuDelete;\r
+    TMenuItem *MenuDeleteAll;\r
+    TMenuItem *MenuDeleteSelected;\r
+    TMenuItem *MenuSelection;\r
+    TMenuItem *MenuSelectionCrop;\r
+    TMenuItem *MenuSelectionInvert;\r
+    TListView *ListViewPlaylist;\r
+    TPopupMenu *PopupMenuPlaylist;\r
+    TMenuItem *PopupPlay;\r
+    TMenuItem *N1;\r
+    TMenuItem *PopupDeleteAll;\r
+    TMenuItem *PopupDeleteSelected;\r
+    TMenuItem *N2;\r
+    TMenuItem *PopupInvertSelection;\r
+    TMenuItem *PopupCropSelection;\r
+    void __fastcall FormShow( TObject *Sender );\r
+    void __fastcall FormHide( TObject *Sender );\r
+    void __fastcall BitBtnOkClick( TObject *Sender );\r
+    void __fastcall ListViewPlaylistDblClick( TObject *Sender );\r
+    void __fastcall ListViewPlaylistKeyDown( TObject *Sender, WORD &Key,\r
+            TShiftState Shift );\r
+    void __fastcall ListViewPlaylistCustomDrawItem( TCustomListView *Sender,\r
+            TListItem *Item, TCustomDrawState State, bool &DefaultDraw );\r
+    void __fastcall MenuAddFileClick( TObject *Sender );\r
+    void __fastcall MenuAddDiscClick( TObject *Sender );\r
+    void __fastcall MenuAddNetClick( TObject *Sender );\r
+    void __fastcall MenuAddUrlClick( TObject *Sender );\r
+    void __fastcall MenuDeleteSelectedClick( TObject *Sender );\r
+    void __fastcall MenuDeleteAllClick( TObject *Sender );\r
+    void __fastcall MenuSelectionInvertClick( TObject *Sender );\r
+    void __fastcall MenuSelectionCropClick( TObject *Sender );\r
+    void __fastcall PopupPlayClick( TObject *Sender );\r
+    void __fastcall PopupInvertSelectionClick( TObject *Sender );\r
+    void __fastcall PopupCropSelectionClick( TObject *Sender );\r
+    void __fastcall PopupDeleteSelectedClick( TObject *Sender );\r
+    void __fastcall PopupDeleteAllClick( TObject *Sender );\r
+private:       // User declarations\r
+    char * __fastcall rindex( char *s, char c );\r
+public:                // User declarations\r
+    __fastcall TPlaylistDlg( TComponent* Owner );\r
+    void __fastcall UpdateGrid( struct playlist_s * p_playlist );\r
+    void __fastcall Manage( struct intf_thread_s * p_intf );\r
+    void __fastcall DeleteItem( int i_pos );\r
+    void __fastcall Previous();\r
+    void __fastcall Next();\r
+};\r
+//---------------------------------------------------------------------------\r
+#endif\r
diff --git a/plugins/win32/preferences.cpp b/plugins/win32/preferences.cpp
new file mode 100644 (file)
index 0000000..c4b5dc3
--- /dev/null
@@ -0,0 +1,560 @@
+/*****************************************************************************\r
+ * preferences.h: the "Preferences" dialog box\r
+ *****************************************************************************\r
+ * Copyright (C) 2002 VideoLAN\r
+ *\r
+ * Authors: Olivier Teuliere <ipkiss@via.ecp.fr>\r
+ *\r
+ * This program is free software; you can redistribute it and/or modify\r
+ * it under the terms of the GNU General Public License as published by\r
+ * the Free Software Foundation; either version 2 of the License, or\r
+ * (at your option) any later version.\r
+ *\r
+ * This program is distributed in the hope that it will be useful,\r
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
+ * GNU General Public License for more details.\r
+ *\r
+ * You should have received a copy of the GNU General Public License\r
+ * along with this program; if not, write to the Free Software\r
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111, USA.\r
+ *****************************************************************************/\r
+\r
+#include <vcl.h>\r
+#pragma hdrstop\r
+\r
+#include <videolan/vlc.h>\r
+\r
+#include "interface.h"\r
+\r
+#include "preferences.h"\r
+#include "win32_common.h"\r
+\r
+//---------------------------------------------------------------------------\r
+//#pragma package(smart_init)\r
+#pragma resource "*.dfm"\r
+\r
+extern struct intf_thread_s *p_intfGlobal;\r
+\r
+/****************************************************************************\r
+ * Functions to help components creation\r
+ ****************************************************************************/\r
+__fastcall TGroupBoxPref::TGroupBoxPref( TComponent* Owner,\r
+            module_config_t *p_config_arg ) : TGroupBox( Owner )\r
+{\r
+    p_config = p_config_arg;\r
+    Caption = p_config->psz_text;\r
+}\r
+//---------------------------------------------------------------------------\r
+TListView * __fastcall TGroupBoxPref::CreateListView( TWinControl *Parent,\r
+            int Left, int Width, int Top, int Height, TViewStyle ViewStyle )\r
+{\r
+    TListView *ListView = new TListView( Parent );\r
+    ListView->Parent = Parent;\r
+    ListView->ViewStyle = ViewStyle;\r
+    ListView->Left = Left;\r
+    ListView->Width = Width;\r
+    ListView->Top = Top;\r
+    ListView->Height = Height;\r
+    return ListView;\r
+}\r
+//---------------------------------------------------------------------------\r
+TButton * __fastcall TGroupBoxPref::CreateButton( TWinControl *Parent,\r
+            int Left, int Width, int Top, int Height, AnsiString Caption )\r
+{\r
+    TButton *Button = new TButton( Parent );\r
+    Button->Parent = Parent;\r
+    Button->Left = Left;\r
+    Button->Width = Width;\r
+    Button->Top = Top;\r
+    Button->Height = Height;\r
+    Button->Caption = Caption;\r
+    return Button;\r
+}\r
+//---------------------------------------------------------------------------\r
+TCheckBox * __fastcall TGroupBoxPref::CreateCheckBox( TWinControl *Parent,\r
+            int Left, int Width, int Top, int Height, AnsiString Caption )\r
+{\r
+    TCheckBox *CheckBox = new TCheckBox( Parent );\r
+    CheckBox->Parent = Parent;\r
+    CheckBox->Left = Left;\r
+    CheckBox->Width = Width;\r
+    CheckBox->Top = Top;\r
+    CheckBox->Height = Height;\r
+    CheckBox->Caption = Caption;\r
+    return CheckBox;\r
+}\r
+//---------------------------------------------------------------------------\r
+TLabel * __fastcall TGroupBoxPref::CreateLabel( TWinControl *Parent,\r
+            int Left, int Width, int Top, int Height, AnsiString Caption,\r
+            bool WordWrap )\r
+{\r
+    TLabel *Label = new TLabel( Parent );\r
+    Label->Parent = Parent;\r
+    Label->Caption = Caption;\r
+    Label->Left = Left;\r
+    Label->Width = Width;\r
+    Label->Top = Top;\r
+    Label->Height = Height;\r
+    Label->WordWrap = WordWrap;\r
+    return Label;\r
+}\r
+//---------------------------------------------------------------------------\r
+TEdit * __fastcall TGroupBoxPref::CreateEdit( TWinControl *Parent,\r
+            int Left, int Width, int Top, int Height, AnsiString Text )\r
+{\r
+    TEdit *Edit = new TEdit( Parent );\r
+    Edit->Parent = Parent;\r
+    Edit->Left = Left;\r
+    Edit->Width = Width;\r
+    Edit->Top = Top;\r
+    Edit->Height = Height;\r
+    Edit->Text = Text;\r
+    return Edit;\r
+}\r
+//---------------------------------------------------------------------------\r
+TUpDown * __fastcall TGroupBoxPref::CreateUpDown( TWinControl *Parent,\r
+            int Min, int Max, int Position, bool Thousands )\r
+{\r
+    TUpDown *UpDown = new TUpDown( Parent );\r
+    UpDown->Parent = Parent;\r
+    UpDown->Min = Min;\r
+    UpDown->Max = Max;\r
+    UpDown->Position = Position;\r
+    UpDown->Thousands = Thousands;\r
+    return UpDown;\r
+}\r
+\r
+\r
+/****************************************************************************\r
+ * GroupBox for plugin management\r
+ ****************************************************************************/\r
+__fastcall TGroupBoxPlugin::TGroupBoxPlugin( TComponent* Owner,\r
+            module_config_t *p_config ) : TGroupBoxPref( Owner, p_config )\r
+{\r
+    /* init listview */\r
+    ListView = CreateListView( this, 16, 164, 24, 160, vsReport );\r
+    ListView->Columns->Add();\r
+    ListView->Columns->Items[0]->Width = 160;\r
+    ListView->Columns->Items[0]->Caption = "Name";//p_config->psz_text;\r
+    ListView->OnSelectItem = ListViewSelectItem;\r
+\r
+    /* init description label */\r
+    LabelDesc = CreateLabel( this, 230, 225, 50, 52,\r
+                             p_config->psz_longtext, true );\r
+\r
+    /* init hint label */\r
+    LabelHint = CreateLabel( this, 230, 225, 135, 13, "", false );\r
+\r
+    /* init configure button */\r
+    ButtonConfig = CreateButton( this, 16, 70, 192, 25, "Configure" );\r
+    ButtonConfig->Enabled = false;\r
+\r
+    /* init select button */\r
+    ButtonSelect = CreateButton( this, 110, 70, 192, 25, "Select" );\r
+    ButtonSelect->OnClick = ButtonSelectClick;\r
+\r
+    /* init 'Selected' label */\r
+    LabelSelected = CreateLabel( this, 230, 45, 198, 13, "Selected", false );\r
+\r
+    /* init 'Selected' edit */\r
+    Edit = CreateEdit( this, 280, 164, 194, 21, "" );\r
+    vlc_mutex_lock( p_config->p_lock );\r
+    Edit->Text = p_config->psz_value ? p_config->psz_value : "";\r
+    vlc_mutex_unlock( p_config->p_lock );\r
+    Edit->OnChange = EditChange;\r
+\r
+    Height = 233;\r
+};\r
+//---------------------------------------------------------------------------\r
+void __fastcall TGroupBoxPlugin::ListViewSelectItem( TObject *Sender,\r
+        TListItem *Item, bool Selected )\r
+{\r
+    module_t *p_module;\r
+    AnsiString Name;\r
+\r
+    Name = Item->Caption;\r
+    if( Name != "" )\r
+    {\r
+        /* look for plugin 'Name' */\r
+        for( p_module = p_module_bank->first ;\r
+             p_module != NULL ;\r
+             p_module = p_module->next )\r
+        {\r
+            if( !strcmp( p_module->psz_name, Name.c_str() ) )\r
+            {\r
+                ModuleSelected = p_module;\r
+                LabelHint->Caption = p_module->psz_longname ?\r
+                                     p_module->psz_longname : "";\r
+                ButtonConfig->Enabled = p_module->i_config_items ? true : false;\r
+\r
+                break;\r
+            }\r
+        }\r
+    }\r
+}\r
+//---------------------------------------------------------------------------\r
+void __fastcall TGroupBoxPlugin::ButtonSelectClick( TObject *Sender )\r
+{\r
+    if( !ModuleSelected ) return;\r
+    Edit->Text = ModuleSelected->psz_name;\r
+}\r
+//---------------------------------------------------------------------------\r
+void __fastcall TGroupBoxPlugin::ButtonConfigClick( TObject *Sender )\r
+{\r
+    /* FIWME: TODO */\r
+}\r
+//---------------------------------------------------------------------------\r
+void __fastcall TGroupBoxPlugin::EditChange( TObject *Sender )\r
+{\r
+    TEdit *Edit = (TEdit *)Sender;\r
+    p_config->psz_value = Edit->Text.c_str();\r
+}\r
+\r
+\r
+/****************************************************************************\r
+ * GroupBox for string management\r
+ ****************************************************************************/\r
+__fastcall TGroupBoxString::TGroupBoxString( TComponent* Owner,\r
+            module_config_t *p_config ) : TGroupBoxPref( Owner, p_config )\r
+{\r
+    /* init description label */\r
+    LabelDesc = CreateLabel( this, 230, 225, 24, 26,\r
+                             p_config->psz_longtext, true );\r
+\r
+    /* init edit */\r
+    Edit = CreateEdit( this, 16, 164, 24, 21, "" );\r
+    vlc_mutex_lock( p_config->p_lock );\r
+    Edit->Text = p_config->psz_value ? p_config->psz_value : "";\r
+    vlc_mutex_unlock( p_config->p_lock );\r
+    Edit->OnChange = EditChange;\r
+\r
+    /* vertical alignment */\r
+    Height = LabelDesc->Height + 24;\r
+    LabelDesc->Top = Top + ( Height - LabelDesc->Height ) / 2 + 4;\r
+    Edit->Top = Top + ( Height - Edit->Height ) / 2 + 4;\r
+};\r
+//---------------------------------------------------------------------------\r
+void __fastcall TGroupBoxString::EditChange( TObject *Sender )\r
+{\r
+    TEdit *Edit = (TEdit *)Sender;\r
+    p_config->psz_value = Edit->Text.c_str();\r
+}\r
+\r
+\r
+/****************************************************************************\r
+ * GroupBox for integer management\r
+ ****************************************************************************/\r
+__fastcall TGroupBoxInteger::TGroupBoxInteger( TComponent* Owner,\r
+            module_config_t *p_config ) : TGroupBoxPref( Owner, p_config )\r
+{\r
+    /* init description label */\r
+    LabelDesc = CreateLabel( this, 230, 225, 19, 26,\r
+                             p_config->psz_longtext, true );\r
+\r
+    /* init edit */\r
+    Edit = CreateEdit( this, 16, 148, 24, 21, "" );\r
+    Edit->OnChange = EditChange;\r
+\r
+    /* init updown */\r
+    UpDown = CreateUpDown( this, -1, 32767, p_config->i_value, false );\r
+    UpDown->Associate = Edit;\r
+\r
+    /* vertical alignment */\r
+    Height = LabelDesc->Height + 24;\r
+    LabelDesc->Top = Top + ( Height - LabelDesc->Height ) / 2 + 4;\r
+    Edit->Top = Top + ( Height - Edit->Height ) / 2 + 4;\r
+};\r
+//---------------------------------------------------------------------------\r
+void __fastcall TGroupBoxInteger::EditChange( TObject *Sender )\r
+{\r
+    TEdit *Edit = (TEdit *)Sender;\r
+    p_config->i_value = StrToInt( Edit->Text );\r
+}\r
+\r
+\r
+/****************************************************************************\r
+ * GroupBox for boolean management\r
+ ****************************************************************************/\r
+__fastcall TGroupBoxBool::TGroupBoxBool( TComponent* Owner,\r
+            module_config_t *p_config ) : TGroupBoxPref( Owner, p_config )\r
+{\r
+    /* init description label */\r
+    LabelDesc = CreateLabel( this, 230, 225, 19, 26,\r
+                             p_config->psz_longtext, true );\r
+\r
+    /* init checkbox */\r
+    CheckBox = CreateCheckBox( this, 16, 184, 28, 17, p_config->psz_text );\r
+    CheckBox->Checked = p_config->i_value;\r
+    CheckBox->OnClick = CheckBoxClick;\r
+\r
+    /* vertical alignment */\r
+    Height = LabelDesc->Height + 24;\r
+    LabelDesc->Top = Top + ( Height - LabelDesc->Height ) / 2 + 4;\r
+    CheckBox->Top = Top + ( Height - CheckBox->Height ) / 2 + 4;\r
+};\r
+//---------------------------------------------------------------------------\r
+void __fastcall TGroupBoxBool::CheckBoxClick( TObject *Sender )\r
+{\r
+    TCheckBox *CheckBox = (TCheckBox *)Sender;\r
+    p_config->i_value = CheckBox->Checked ? 1 : 0;\r
+}\r
+\r
+\r
+/****************************************************************************\r
+ * Callbacks for the dialog\r
+ ****************************************************************************/\r
+//---------------------------------------------------------------------------\r
+__fastcall TPreferencesDlg::TPreferencesDlg( TComponent* Owner )\r
+        : TForm( Owner )\r
+{\r
+    Icon = p_intfGlobal->p_sys->p_window->Icon;\r
+}\r
+//---------------------------------------------------------------------------\r
+void __fastcall TPreferencesDlg::FormClose( TObject *Sender,\r
+      TCloseAction &Action )\r
+{\r
+    Action = caHide;\r
+}\r
+//---------------------------------------------------------------------------\r
+void __fastcall TPreferencesDlg::FormShow( TObject *Sender )\r
+{\r
+    p_intfGlobal->p_sys->p_window->MenuPreferences->Checked = true;\r
+    p_intfGlobal->p_sys->p_window->PopupPreferences->Checked = true;\r
+}\r
+//---------------------------------------------------------------------------\r
+void __fastcall TPreferencesDlg::FormHide( TObject *Sender )\r
+{\r
+    p_intfGlobal->p_sys->p_window->MenuPreferences->Checked = false;\r
+    p_intfGlobal->p_sys->p_window->PopupPreferences->Checked = false;\r
+}\r
+\r
+\r
+/****************************************************************************\r
+ * CreateConfigDialog: dynamically creates the configuration dialog\r
+ * box from all the configuration data provided by the selected module.\r
+ ****************************************************************************/\r
+#define ADD_PANEL                               \\r
+{                                               \\r
+            Panel = new TPanel( this );         \\r
+            Panel->Parent = ScrollBox;          \\r
+            Panel->Caption = "";                \\r
+            Panel->BevelOuter = bvNone;         \\r
+            Panel->Height = 12;                 \\r
+}\r
+\r
+void __fastcall TPreferencesDlg::CreateConfigDialog( char *psz_module_name )\r
+{\r
+    bool config_dialog;\r
+    module_t *p_module;\r
+    module_t *p_module_plugins;\r
+    int i, j;\r
+\r
+    TTabSheet *TabSheet;\r
+    TScrollBox *ScrollBox;\r
+    TPanel *Panel;\r
+    TGroupBoxPlugin *GroupBoxPlugin;\r
+    TGroupBoxString *GroupBoxString;\r
+    TGroupBoxInteger *GroupBoxInteger;\r
+    TGroupBoxBool *GroupBoxBool;\r
+    TListItem *ListItem;\r
+\r
+    /* Check if the dialog box is already opened, if so this will save us\r
+     * quite a bit of work. (the interface will be destroyed when you actually\r
+     * close the main window, but remember that it is only hidden if you\r
+     * clicked on the action buttons). This trick also allows us not to\r
+     * duplicate identical dialog windows. */\r
+\r
+    /* FIXME: we must find a way of really checking whether the dialog\r
+     * box is already opened */\r
+    config_dialog = false;\r
+\r
+    if( config_dialog )\r
+    {\r
+        /* Yeah it was open */\r
+        Show();\r
+        return;\r
+    }\r
+\r
+    /* Look for the selected module */\r
+    for( p_module = p_module_bank->first ; p_module != NULL ;\r
+         p_module = p_module->next )\r
+    {\r
+\r
+        if( psz_module_name && !strcmp( psz_module_name, p_module->psz_name ) )\r
+            break;\r
+    }\r
+    if( !p_module ) return;\r
+\r
+    /*\r
+     * We found it, now we can start building its configuration interface\r
+     */\r
+\r
+    /* Enumerate config options and add corresponding config boxes */\r
+    for( i = 0; i < p_module->i_config_lines; i++ )\r
+    {\r
+        switch( p_module->p_config[i].i_type )\r
+        {\r
+        case MODULE_CONFIG_HINT_CATEGORY:\r
+\r
+            /* create a new tabsheet. */\r
+            TabSheet = new TTabSheet( this );\r
+            TabSheet->PageControl = PageControlPref;\r
+            TabSheet->Caption = p_module->p_config[i].psz_text;\r
+            TabSheet->Visible = true;\r
+\r
+            /* pack a scrollbox into the tabsheet */\r
+            ScrollBox = new TScrollBox( this );\r
+            ScrollBox->Parent = TabSheet;\r
+            ScrollBox->Align = alClient;\r
+            ScrollBox->BorderStyle = bsNone;\r
+            ScrollBox->HorzScrollBar->Tracking = true;\r
+            ScrollBox->VertScrollBar->Tracking = true;\r
+\r
+            break;\r
+\r
+        case MODULE_CONFIG_ITEM_PLUGIN:\r
+\r
+            /* add new groupbox for the config option */\r
+            GroupBoxPlugin = new TGroupBoxPlugin( this, &p_module->p_config[i] );\r
+            GroupBoxPlugin->Parent = ScrollBox;\r
+\r
+            /* add panel as separator */\r
+            ADD_PANEL;\r
+\r
+            /* build a list of available plugins */\r
+            for( p_module_plugins = p_module_bank->first ;\r
+                 p_module_plugins != NULL ;\r
+                 p_module_plugins = p_module_plugins->next )\r
+            {\r
+                if( p_module_plugins->i_capabilities &\r
+                    ( 1 << p_module->p_config[i].i_value ) )\r
+                {\r
+                    ListItem = GroupBoxPlugin->ListView->Items->Add();\r
+                    ListItem->Caption = p_module_plugins->psz_name;\r
+                }\r
+            }\r
+\r
+            break;\r
+\r
+        case MODULE_CONFIG_ITEM_FILE:\r
+\r
+        case MODULE_CONFIG_ITEM_STRING:\r
+\r
+            /* add new groupbox for the config option */\r
+            GroupBoxString = new TGroupBoxString( this, &p_module->p_config[i] );\r
+            GroupBoxString->Parent = ScrollBox;\r
+\r
+            /* add panel as separator */\r
+            ADD_PANEL;\r
+\r
+            break;\r
+\r
+        case MODULE_CONFIG_ITEM_INTEGER:\r
+\r
+            /* add new groupbox for the config option */\r
+            GroupBoxInteger = new TGroupBoxInteger( this, &p_module->p_config[i] );\r
+            GroupBoxInteger->Parent = ScrollBox;\r
+\r
+            /* add panel as separator */\r
+            ADD_PANEL;\r
+\r
+            break;\r
+\r
+        case MODULE_CONFIG_ITEM_BOOL:\r
+\r
+            /* add new groupbox for the config option */\r
+            GroupBoxBool = new TGroupBoxBool( this, &p_module->p_config[i] );\r
+            GroupBoxBool->Parent = ScrollBox;\r
+\r
+            /* add panel as separator */\r
+            ADD_PANEL;\r
+\r
+            break;\r
+        }\r
+    }\r
+\r
+    /* Reorder groupboxes inside the tabsheets */\r
+    for( i = 0; i < PageControlPref->PageCount; i++ )\r
+    {\r
+        /* get scrollbox from the tabsheet */\r
+        ScrollBox = (TScrollBox *)PageControlPref->Pages[i]->Controls[0];\r
+\r
+        for( j = ScrollBox->ControlCount - 1; j >= 0 ; j-- )\r
+        {\r
+            ScrollBox->Controls[j]->Align = alTop;\r
+        }\r
+    }\r
+\r
+    /* set active tabsheet\r
+     * FIXME: i don't know why, but both lines are necessary */\r
+    PageControlPref->ActivePageIndex = 1;\r
+    PageControlPref->ActivePageIndex = 0;\r
+\r
+    /* Ok, job done successfully. Let's keep a reference to the dialog box*/\r
+    /* FIXME: TODO */\r
+\r
+    /* we want this ref to be destroyed if the object is destroyed */\r
+    /* FIXME: TODO */\r
+    \r
+    Show();\r
+}\r
+#undef ADD_PANEL\r
+//---------------------------------------------------------------------------\r
+void __fastcall TPreferencesDlg::ButtonOkClick( TObject *Sender )\r
+{\r
+    ButtonApplyClick( Sender );\r
+    Hide();\r
+}\r
+//---------------------------------------------------------------------------\r
+void __fastcall TPreferencesDlg::ButtonApplyClick( TObject *Sender )\r
+{\r
+    TScrollBox *ScrollBox;\r
+    TGroupBoxPref *GroupBox;\r
+    int i, j;\r
+\r
+    for( i = 0; i < PageControlPref->PageCount; i++ )\r
+    {\r
+        /* get scrollbox from the tabsheet */\r
+        ScrollBox = (TScrollBox *)PageControlPref->Pages[i]->Controls[0];\r
+\r
+        for( j = 0; j < ScrollBox->ControlCount ; j++ )\r
+        {\r
+            /* skip the panels */\r
+            if( ScrollBox->Controls[j]->InheritsFrom( __classid( TGroupBoxPref ) ) )\r
+            {\r
+                GroupBox = (TGroupBoxPref *)ScrollBox->Controls[j];\r
+                SaveValue( GroupBox->p_config );\r
+            }\r
+        }\r
+    }\r
+}\r
+//---------------------------------------------------------------------------\r
+void __fastcall TPreferencesDlg::ButtonSaveClick( TObject *Sender )\r
+{\r
+    ButtonApplyClick( Sender );\r
+    config_SaveConfigFile( NULL );\r
+}\r
+//---------------------------------------------------------------------------\r
+void __fastcall TPreferencesDlg::ButtonCancelClick( TObject *Sender )\r
+{\r
+    Hide();\r
+}\r
+//---------------------------------------------------------------------------\r
+void __fastcall TPreferencesDlg::SaveValue( module_config_t *p_config )\r
+{\r
+    switch( p_config->i_type )\r
+    {\r
+        case MODULE_CONFIG_ITEM_STRING:\r
+        case MODULE_CONFIG_ITEM_FILE:\r
+        case MODULE_CONFIG_ITEM_PLUGIN:\r
+            config_PutPszVariable( p_config->psz_name, p_config->psz_value );\r
+            break;\r
+        case MODULE_CONFIG_ITEM_INTEGER:\r
+        case MODULE_CONFIG_ITEM_BOOL:\r
+            config_PutIntVariable( p_config->psz_name, p_config->i_value );\r
+            break;\r
+    }\r
+}\r
+//---------------------------------------------------------------------------\r
+\r
diff --git a/plugins/win32/preferences.dfm b/plugins/win32/preferences.dfm
new file mode 100644 (file)
index 0000000..81de0fc
--- /dev/null
@@ -0,0 +1,293 @@
+object PreferencesDlg: TPreferencesDlg\r
+  Left = 309\r
+  Top = 124\r
+  Width = 522\r
+  Height = 582\r
+  Caption = 'Preferences'\r
+  Color = clBtnFace\r
+  Font.Charset = DEFAULT_CHARSET\r
+  Font.Color = clWindowText\r
+  Font.Height = -11\r
+  Font.Name = 'MS Sans Serif'\r
+  Font.Style = []\r
+  Icon.Data = {\r
+    0000010001003030000001001800A81C00001600000028000000300000006000\r
+    00000100180000000000001B0000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000069375900000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000120E0A4011253E0F18000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000F0B\r
+    084143CA08070016430F08040800000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    00000000000000003127291203174647E8464AE808010840E54039E6390B0C06\r
+    0E0A1C0000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0070CD0079DD0079DD0070CD0000000000000000000C1008261D6E4647E54547\r
+    E64748E105040039E6393AE53939E63936D33308030100000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    000000000070CD0079DD0079DE007DE40088F9008CFF008CFF0088F9007CE302\r
+    6EC70B09124641DC4444DF4546E34446E54847E003040040E6403AEA3A3EE33E\r
+    3CE33C39E639080F010801050000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    00000000000000000070CD0079DD0077D90070CB0078D8007BDC007BDC007BDC\r
+    007BDC007BDC007BDD007EE32E232D0804084553F14250F34252ED4449DB4844\r
+    DC4645E208010540E5401C78150D18053CE63C3AE63A39EA393CD83C241A2006\r
+    0402000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000070CD0079DD007ADF007BDE007BDC0072\r
+    CC005188004877004876004876004876034976054A760B4D7731434221175B42\r
+    54EC4253EE4252F60B05104250F44252EB4546DA08010539E6392BAA2B080105\r
+    3CE63C39E7393AE63A39E93939E839081208181C080000000000000000000000\r
+    000000000000000000000000000000000000000070CD0079DD0079DD007CE300\r
+    88F90089F90075D2005188004877005188008CFF008CFF008CFF008CFF008CFF\r
+    1092FF2099FF31A0FF1408294840DB4550E1464EEA0C060B0B05084654F64653\r
+    F64453EF080E033AE63A2BAA2B03030339E33939DF3939E639080F083DDB3D24\r
+    9C24434B3B000000000000000000000000000000000000000000000000000000\r
+    0063B60085F3008BFE0088F9007FE90088F90080E8005CA0008CFF008CFF008C\r
+    FF008CFF008CFF008CFF008CFF048DFF1594FF259BFF35A2FF0C04103F38C754\r
+    5AF7505BF10C08100801084352F64652F44253F30813053AE63A39E639030403\r
+    1C521826A1250812010807032454131558150000000000000000000000000000\r
+    000000000000000000000000000000000000000070CD007CE30079DD00000000\r
+    7CE30089FA008CFF0089FA008CFF008CFF008CFF008CFF008CFF008CFF098FFF\r
+    1996FF2A9DFF3AA4FF0804103A2AA34E58F74E58F40B0B120803054652F34548\r
+    E64451F305130532CA323AE23A03070308070307040008040139E63939E43931\r
+    B42F5E1347000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000061B10000000079DD008CFF008CFF008CFF008CFF008C\r
+    FF008CFF008CFF008CFF008CFF0E91FF1E98FF2E9FFF3FA6FF040408382BAF4D\r
+    5AEF555AF70F12250501050F04160804074250F3121A123AE93A39E239080803\r
+    0D2F08010401268C2539E7393DE63D3FE23E0804100000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    79DD008CFF008CFF008CFF008CFF008CFF008CFF008CFF008CFF028CFF1293FF\r
+    239AFF33A1FF43A8FF0802083A2AA3565BF7555AF71714330501050104000801\r
+    07424FF12828203AEA3A39E639030703182F1008340801040139E7393DE83D39\r
+    E939080400000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000070CD0088F9008CFF008CFF008CFF008C\r
+    FF008CFF008CFF008CFF078EFF1795FF279CFF38A3FF48AAFF0808005151F155\r
+    5AF30804030804000504050800082E358E0E0C1F1D192439E53940E640080400\r
+    2AA12739E63908020708010539E8393BE93B0804080000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000007CE3008CFF008CFF008CFF058EFD1D96F92398F8269AFA31A0FC42A8FF\r
+    4FAEFF5CB3FF65B7FF0C08084F5AF14E57F50B04080804043639A54647E81C13\r
+    49363AA70804080F120835953439E7393EE63E39DF3939EA39081105308A2B3F\r
+    E73F080601000000000000000000000000000000000000000000000000000000\r
+    000000000000000000000000000000000000047BDB1D96F92398F82498F83BA0\r
+    F399C1E1B1C9DDBCD4E7CBE0F3D9EDFFDCEEFFDEEFFFCDE8FF080808575BF750\r
+    58F624125A5057F34845DF4A41E0150E30C55734E3723EC56E33A23D27050105\r
+    39E43939E63939E6393CE63C14420C3BE03B192A090000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000004\r
+    04042D88D399C1E1B1C9DDB1C9DCB7CBDBCFD3D7D5D5D6E2E2E3F0F0F1FEFEFF\r
+    FEFEFFFEFEFFF9FCFF0C08085D61F15B61EF555AF64A4FE13937BB0E0A12DE74\r
+    39E1733CDE713CDF753AE67541C36B342C231F17141B3AE63A39E7393DE83D39\r
+    E93939DE39000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000001818186893B8C3CCD2D5D5D6D5D5D6D5D5\r
+    D6D6D6D6D6D6D6E3E3E3F1F1F1FFFFFFFFFFFFFFFFFFFFFFFF140C145C5EF668\r
+    63F75555EA10061CC3673FDF713A0C1104080403080105080007070407D56F36\r
+    DE743EDE72401C200C29452939E63939E73939EA390000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000343434A2B4C2D5D5D6D6D6D6D6D6D6D6D6D6D5D5D6E2E2E3F0F0F1FEFEFF\r
+    FEFEFFFEFEFFFEFEFF20161C5C5EF6373EAE0E0413E2713DE1763CCD6A3C2A0D\r
+    08A44B2CDE743EBD612F080401030403E1713CDE7239DE713AE1723C22201139\r
+    C13341E641000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000001B1B1B99AEBED5D5D6D5D5D6D5D5\r
+    D6CFD3D7B8CBDBBFD5E7CEE2F3DCEFFFDFF0FFE2F1FFE9F4FF10100C3639A46E\r
+    4540DE7239DE713DE1713C07000784261CDE7639E3743E0812001F0407D86E36\r
+    E3753EE57540E57541DE763CDE733DD26637493C387E2F7B0000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    00001B1B1B99AEBFCED3D7B7CBDBB1C9DD99C1E140A2F339A2FA49AAFC59B2FF\r
+    66B8FF74BEFF92CBFFD9ECFF0F0402C66531DE7139E2733D854B1E0A01084D11\r
+    0DE3733EE1723CDF713ADF753AE1763C1D0A08290708E57140E1763CDE733DC7\r
+    6B34080408000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000001818187FA5C399C1E13BA0F32498\r
+    F81D96F91091FD1C97FF2C9EFF3CA5FF4DACFF5DB3FF71BBFF8DC8FF9FD0FF08\r
+    0400080406B95C2EDE7239070B070803014D1615DE723CDE7540E5714030090D\r
+    0504003A120FE67541DE75390808044A0C290000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    00000707071778C81C92F3058EFD008CFF008CFF1092FF2099FF31A0FF41A7FF\r
+    51AEFF62B5FF72BCFF7BBFFF7BBBF96E9FCD0808080806041D0508E571403E22\r
+    0C200708080405070407070007080303B05F31DE723967301908010500000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    000000000000000000000000000000000000000000000000007CE3008CFF008C\r
+    FF048DFF1594FF259BFF35A2FF46A9FF56B0FF66B7FF77BEFF7BBFFF6DAAE300\r
+    0000000000000000000000080401200C088D4024E17141E57140DF713ADE713E\r
+    DE76390801070000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    00000000000000000079DD008CFF008CFF098FFF1996FF2A9DFF3AA4FF4AABFF\r
+    5BB2FF6BB9FF7BBFFF7BBFFF6AA5DD0000000000000000000000000000001D1A\r
+    0C1A0F08110903441912E57140623B1E08020300000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000079DD008CFF008C\r
+    FF0E91FF1E98FF2E9FFF3FA6FF4FADFF5FB4FF70BBFF7BBFFF78BAF96299CD00\r
+    00000000000000000000000000000000000000003914100000005A2411000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    00000000000000000070CD0088F9078EFD2C9CF940A3F850ACFA60B4FC70BCFF\r
+    7DC2FF87C6FF7EC0FF6DAAE30000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000707071A85DD40A2\r
+    F3A0C3E1B7CBDDC6D8E7D4E5F3E2F1FFE5F2FFD9ECFF9FD0FF7AACDD05050500\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    00000000000000001818187FA5C3B8CBDBD0D4D7D5D5D6E2E2E3F0F0F1FEFEFF\r
+    FEFEFFFAFCFFE2EDF99FB7CD1C1C1C0000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000001B1B1B99AEBFD4D5\r
+    D6D6D6D6D6D6D6E3E3E3F1F1F1FFFFFFFFFFFFFEFEFFD1DAE33E3E3E00000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    00000000000000001D1D1D7B9BB4CACED1D6D6D6D5D5D6E2E2E3F0F0F1FEFEFF\r
+    FEFEFFFEFEFFC9D2DD2121210000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    000000000000000000000000000000000000000000000000000000343434A5B5\r
+    C2CFD3D7BFCEDBC9D9E7D7E6F3E6F3FFECF5FFF0F4F9AEBDCD23232300000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    000000000000000000000018181887A8C3A6C6E169B3F367B6FA77BEFC88C6FF\r
+    9FD0FFB4CBE33939390000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    000000000000000000000000000000000000000000000000000000040404338C\r
+    D749A8F947A9FD54AFFF64B6FF74BDFF7EC0FF76ABDD05050500000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    00000000000000000000000000001F7DCD369FF948AAFF58B1FF69B8FF79BFFF\r
+    78BAF96299CD0000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    003592E34DACFF5DB3FF6DBAFF7BBFFF6DAAE300000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    00000000000000000000000000000000003890DD51AEFF62B5FF72BCFF7BBFFF\r
+    6AA5DD0000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    003B8FD84C9CE3589FDE69A9E375B6F46299CD00000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    00000000000000000000000000000000003376B00000000000000000005788B6\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    00000000006CC61A83DD247FCC00000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000006DC71A83DD2686D71F6EB1\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    0000000000000000000000000000000000000000000000000000000000000000\r
+    000000000000000000000000000000000000000000000000000000000000FFFF\r
+    FFFFFFFF0000FFFFFFFFFFFF0000FFFFFE1FDFFF0000FFFFE0078FFF0000FFFE\r
+    000007FF0000FFF0000001FF0000FF80000000FF0000FF000000003F0000FF00\r
+    0000000F0000FE00000000070000F800000000070000F8000000000F0000FC00\r
+    000000070000FE00000000070000FF80000000070000FFC0000000070000FFE0\r
+    000000070000FFE0000000070000FFE0000000070000FFE0000000070000FFF0\r
+    000000070000FFF0000000030000FFF0000000070000FFF00000000F0000FFF0\r
+    0000003F0000FFF8000E00FF0000FFF8000F01FF0000FFF8000FD7FF0000FFF8\r
+    001FFFFF0000FFFC001FFFFF0000FFFC001FFFFF0000FFFC003FFFFF0000FFFC\r
+    003FFFFF0000FFFE003FFFFF0000FFFE007FFFFF0000FFFE007FFFFF0000FFFE\r
+    007FFFFF0000FFFF00FFFFFF0000FFFF00FFFFFF0000FFFF00FFFFFF0000FFFF\r
+    01FFFFFF0000FFFF01FFFFFF0000FFFF81FFFFFF0000FFFFC3FFFFFF0000FFFF\r
+    FFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFF0000}\r
+  OldCreateOrder = False\r
+  OnClose = FormClose\r
+  OnHide = FormHide\r
+  OnShow = FormShow\r
+  PixelsPerInch = 96\r
+  TextHeight = 13\r
+  object PageControlPref: TPageControl\r
+    Left = 8\r
+    Top = 8\r
+    Width = 497\r
+    Height = 497\r
+    TabOrder = 1\r
+  end\r
+  object ButtonApply: TButton\r
+    Left = 146\r
+    Top = 520\r
+    Width = 105\r
+    Height = 25\r
+    Caption = 'Apply'\r
+    TabOrder = 0\r
+    OnClick = ButtonApplyClick\r
+  end\r
+  object ButtonSave: TButton\r
+    Left = 265\r
+    Top = 520\r
+    Width = 105\r
+    Height = 25\r
+    Caption = 'Save'\r
+    TabOrder = 2\r
+    OnClick = ButtonSaveClick\r
+  end\r
+  object ButtonOK: TButton\r
+    Left = 26\r
+    Top = 520\r
+    Width = 105\r
+    Height = 25\r
+    Caption = 'OK'\r
+    TabOrder = 3\r
+    OnClick = ButtonOkClick\r
+  end\r
+  object ButtonCancel: TButton\r
+    Left = 386\r
+    Top = 520\r
+    Width = 105\r
+    Height = 25\r
+    Caption = 'Cancel'\r
+    TabOrder = 4\r
+    OnClick = ButtonCancelClick\r
+  end\r
+end\r
diff --git a/plugins/win32/preferences.h b/plugins/win32/preferences.h
new file mode 100644 (file)
index 0000000..fc0c12e
--- /dev/null
@@ -0,0 +1,123 @@
+/*****************************************************************************\r
+ * preferences.h: the "Preferences" dialog box\r
+ *****************************************************************************\r
+ * Copyright (C) 2002 VideoLAN\r
+ *\r
+ * Authors: Olivier Teuliere <ipkiss@via.ecp.fr>\r
+ *\r
+ * This program is free software; you can redistribute it and/or modify\r
+ * it under the terms of the GNU General Public License as published by\r
+ * the Free Software Foundation; either version 2 of the License, or\r
+ * (at your option) any later version.\r
+ *\r
+ * This program is distributed in the hope that it will be useful,\r
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
+ * GNU General Public License for more details.\r
+ *\r
+ * You should have received a copy of the GNU General Public License\r
+ * along with this program; if not, write to the Free Software\r
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111, USA.\r
+ *****************************************************************************/\r
+\r
+#ifndef preferencesH\r
+#define preferencesH\r
+//---------------------------------------------------------------------------\r
+#include <Classes.hpp>\r
+#include <Controls.hpp>\r
+#include <StdCtrls.hpp>\r
+#include <Forms.hpp>\r
+#include <Buttons.hpp>\r
+#include <ComCtrls.hpp>\r
+#include <ExtCtrls.hpp>\r
+//---------------------------------------------------------------------------\r
+class TGroupBoxPref : public TGroupBox\r
+{\r
+public:\r
+    __fastcall TGroupBoxPref( TComponent* Owner, module_config_t *p_config_arg );\r
+    module_config_t *p_config;\r
+    TListView * __fastcall CreateListView( TWinControl *Parent,\r
+            int Left, int Width, int Top, int Height, TViewStyle ViewStyle );\r
+    TButton * __fastcall CreateButton( TWinControl *Parent,\r
+            int Left, int Width, int Top, int Height, AnsiString Caption );\r
+    TCheckBox * __fastcall CreateCheckBox( TWinControl *Parent,\r
+            int Left, int Width, int Top, int Height, AnsiString Caption );\r
+    TLabel * __fastcall CreateLabel( TWinControl *Parent,\r
+            int Left, int Width, int Top, int Height, AnsiString Caption,\r
+            bool WordWrap );\r
+    TEdit * __fastcall CreateEdit( TWinControl *Parent,\r
+            int Left, int Width, int Top, int Height, AnsiString Text );\r
+    TUpDown * __fastcall CreateUpDown( TWinControl *Parent,\r
+            int Min, int Max, int Position, bool Thousands );\r
+};\r
+//---------------------------------------------------------------------------\r
+class TGroupBoxPlugin : public TGroupBoxPref\r
+{\r
+public:\r
+    __fastcall TGroupBoxPlugin( TComponent* Owner, module_config_t *p_config );\r
+    TListView *ListView;\r
+    TButton *ButtonConfig;\r
+    TButton *ButtonSelect;\r
+    TLabel *LabelDesc;\r
+    TLabel *LabelHint;\r
+    TLabel *LabelSelected;\r
+    TEdit *Edit;\r
+    module_t *ModuleSelected;\r
+    void __fastcall ListViewSelectItem( TObject *Sender, TListItem *Item,\r
+                                        bool Selected );\r
+    void __fastcall ButtonSelectClick( TObject *Sender );\r
+    void __fastcall ButtonConfigClick( TObject *Sender );\r
+    void __fastcall EditChange( TObject *Sender );\r
+};\r
+//---------------------------------------------------------------------------\r
+class TGroupBoxString : public TGroupBoxPref\r
+{\r
+public:\r
+    __fastcall TGroupBoxString( TComponent* Owner, module_config_t *p_config );\r
+    TLabel *LabelDesc;\r
+    TEdit *Edit;\r
+    void __fastcall EditChange( TObject *Sender );\r
+};\r
+//---------------------------------------------------------------------------\r
+class TGroupBoxInteger : public TGroupBoxPref\r
+{\r
+public:\r
+    __fastcall TGroupBoxInteger( TComponent* Owner, module_config_t *p_config );\r
+    TLabel *LabelDesc;\r
+    TEdit *Edit;\r
+    TUpDown *UpDown;\r
+    void __fastcall EditChange( TObject *Sender );\r
+};\r
+//---------------------------------------------------------------------------\r
+class TGroupBoxBool : public TGroupBoxPref\r
+{\r
+public:\r
+    __fastcall TGroupBoxBool( TComponent* Owner, module_config_t *p_config );\r
+    TLabel *LabelDesc;\r
+    TCheckBox *CheckBox;\r
+    void __fastcall CheckBoxClick( TObject *Sender );\r
+};\r
+//---------------------------------------------------------------------------\r
+class TPreferencesDlg : public TForm\r
+{\r
+__published:   // IDE-managed Components\r
+    TPageControl *PageControlPref;\r
+    TButton *ButtonApply;\r
+    TButton *ButtonSave;\r
+    TButton *ButtonOK;\r
+    TButton *ButtonCancel;\r
+    void __fastcall FormShow( TObject *Sender );\r
+    void __fastcall FormHide( TObject *Sender );\r
+    void __fastcall ButtonOkClick( TObject *Sender );\r
+    void __fastcall ButtonApplyClick( TObject *Sender );\r
+    void __fastcall ButtonSaveClick( TObject *Sender );\r
+    void __fastcall ButtonCancelClick( TObject *Sender );\r
+    void __fastcall FormClose( TObject *Sender, TCloseAction &Action );\r
+private:       // User declarations\r
+public:                // User declarations\r
+    __fastcall TPreferencesDlg( TComponent* Owner );\r
+    void __fastcall CreateConfigDialog( char *psz_module_name );\r
+    void __fastcall SaveValue( module_config_t *p_config );\r
+};\r
+//---------------------------------------------------------------------------\r
+#endif\r
index e41689917a7edb8f571d6b255463590a6030eaef..3167bad3b61199f1ff48a30a4c95e7c61bae2837 100644 (file)
@@ -2,9 +2,8 @@
  * win32.cpp : Win32 interface plugin for vlc
  *****************************************************************************
  * Copyright (C) 2002 VideoLAN
- * $Id: win32.cpp,v 1.1 2002/01/21 00:52:07 sam Exp $
  *
- * Authors: 
+ * Authors: Olivier Teulière <ipkiss@via.ecp.fr> 
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
 #include <stdlib.h>                                      /* malloc(), free() */
 #include <string.h>
 
-extern "C"
-{
 #include <videolan/vlc.h>
 
+#include "win32.h"                                       /* Borland specific */
+
 /*****************************************************************************
  * Capabilities defined in the other files.
  *****************************************************************************/
-void _M( intf_getfunctions )( function_list_t * p_function_list );
+void _M( intf_getfunctions ) ( function_list_t * p_function_list );
 
 /*****************************************************************************
  * Build configuration tree.
@@ -43,7 +42,7 @@ MODULE_CONFIG_START
 MODULE_CONFIG_STOP
 
 MODULE_INIT_START
-    SET_DESCRIPTION( "Win32 interface" )
+    SET_DESCRIPTION( "Win32 interface module" )
     ADD_CAPABILITY( INTF, 100 )
     ADD_SHORTCUT( "win32" )
 MODULE_INIT_STOP
@@ -55,4 +54,3 @@ MODULE_ACTIVATE_STOP
 MODULE_DEACTIVATE_START
 MODULE_DEACTIVATE_STOP
 
-} /* extern "C" */
diff --git a/plugins/win32/win32.h b/plugins/win32/win32.h
new file mode 100644 (file)
index 0000000..47f5e29
--- /dev/null
@@ -0,0 +1,31 @@
+/*****************************************************************************\r
+ * win32.h : Win32 interface plugin for vlc
+ *****************************************************************************
+ * Copyright (C) 2002 VideoLAN
+ *
+ * Authors: Olivier Teulière <ipkiss@via.ecp.fr> 
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111, USA.
+ *****************************************************************************/
+\r
+/*****************************************************************************\r
+ * Exported interface functions.
+ *****************************************************************************/
+extern "C" __declspec(dllexport)\r
+    int __VLC_SYMBOL( InitModule ) ( module_t *p_module );\r
+extern "C" __declspec(dllexport)\r
+    int __VLC_SYMBOL( ActivateModule ) ( module_t *p_module );\r
+extern "C" __declspec(dllexport)\r
+    int __VLC_SYMBOL( DeactivateModule ) ( module_t *p_module );\r
diff --git a/plugins/win32/win32_common.h b/plugins/win32/win32_common.h
new file mode 100644 (file)
index 0000000..3d6bee5
--- /dev/null
@@ -0,0 +1,89 @@
+/*****************************************************************************\r
+ * win32_common.h: private win32 interface description\r
+ *****************************************************************************\r
+ * Copyright (C) 2002 VideoLAN\r
+ *\r
+ * Authors: Olivier Teuliere <ipkiss@via.ecp.fr>\r
+ *\r
+ * This program is free software; you can redistribute it and/or modify\r
+ * it under the terms of the GNU General Public License as published by\r
+ * the Free Software Foundation; either version 2 of the License, or\r
+ * (at your option) any later version.\r
+ * \r
+ * This program is distributed in the hope that it will be useful,\r
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
+ * GNU General Public License for more details.\r
+ *\r
+ * You should have received a copy of the GNU General Public License\r
+ * along with this program; if not, write to the Free Software\r
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111, USA.\r
+ *****************************************************************************/\r
+\r
+#include "about.h"\r
+#include "disc.h"\r
+#include "mainframe.h"\r
+#include "menu.h"\r
+#include "messages.h"\r
+#include "network.h"\r
+#include "playlist.h"\r
+#include "preferences.h"\r
+\r
+typedef struct es_descriptor_s es_descriptor_t;\r
+\r
+/*****************************************************************************\r
+ * The TrackBar is graduated from 0 to SLIDER_MAX_VALUE.\r
+ * SLIDER_MAX_VALUE is set to the higher acceptable value (2^31 - 1), in order\r
+ * to obtain the best precision in date calculation\r
+ *****************************************************************************/\r
+#define SLIDER_MAX_VALUE 2147483647\r
+\r
+/*****************************************************************************\r
+ * intf_sys_t: description and status of Win32 interface\r
+ *****************************************************************************/\r
+typedef struct intf_sys_s\r
+{\r
+    /* special actions */\r
+    boolean_t           b_playing;\r
+    boolean_t           b_popup_changed;             /* display popup menu ? */\r
+    boolean_t           b_slider_free;                      /* slider status */\r
+\r
+    /* menus handlers */\r
+    boolean_t           b_program_update;   /* do we need to update programs \r
+                                                                        menu */\r
+    boolean_t           b_title_update;  /* do we need to update title menus */\r
+    boolean_t           b_chapter_update;    /* do we need to update chapter\r
+                                                                       menus */\r
+    boolean_t           b_audio_update;  /* do we need to update audio menus */\r
+    boolean_t           b_spu_update;      /* do we need to update spu menus */\r
+\r
+    /* windows and widgets */\r
+    TMainFrameDlg     * p_window;                             /* main window */\r
+    TPlaylistDlg      * p_playlist;                              /* playlist */\r
+    TPopupMenu        * p_popup;                               /* popup menu */\r
+    TAboutDlg         * p_about;                             /* about window */\r
+    TDiscDlg          * p_disc;                     /* disc selection window */\r
+    TNetworkDlg       * p_network;                  /* network stream window */\r
+    TPreferencesDlg   * p_preferences;                 /* preferences window */\r
+\r
+    /* The slider */\r
+    off_t               OldValue;                          /* previous value */\r
+\r
+    /* The messages window */\r
+    TMessagesDlg      * p_messages;                       /* messages window */\r
+    intf_subscription_t*p_sub;                     /* interface subscription */\r
+\r
+    /* Playlist management */\r
+    int                 i_playing;                 /* playlist selected item */\r
+\r
+    /* The window labels for DVD mode */\r
+    TLabel            * p_label_title;\r
+    TLabel            * p_label_chapter;\r
+    int                 i_part;                           /* current chapter */\r
+\r
+    /* Language information */\r
+    es_descriptor_t   * p_audio_es_old;\r
+    es_descriptor_t   * p_spu_es_old;\r
+\r
+} intf_sys_t;\r
+\r
diff --git a/share/vlc48x48.ico b/share/vlc48x48.ico
new file mode 100644 (file)
index 0000000..8c62276
Binary files /dev/null and b/share/vlc48x48.ico differ