The interface is quite basic for now but should be functional anyway.
(you need to have wxWindows >= 2.3.0 installed to use this plugin)
# add ws2_32 for closesocket, select, recv
CPPFLAGS_save="${CPPFLAGS_save} -D_OFF_T_ -D_off_t=long"
CPPFLAGS="${CPPFLAGS_save}"
+ CXXFLAGS_save="${CXXFLAGS_save} -fvtable-thunks";
+ CXXFLAGS="${CXXFLAGS_save}"
LDFLAGS_vlc="${LDFLAGS_vlc} -lws2_32 -lnetapi32 -mwindows"
LDFLAGS_ipv4="${LDFLAGS_ipv4} -lws2_32"
LDFLAGS_ipv6="${LDFLAGS_ipv6} -lws2_32"
AC_TRY_COMPILE([],,ac_cv_c_Wall_Winline=yes, ac_cv_c_Wall_Winline=no)])
if test "x${ac_cv_c_Wall_Winline}" != "xno"; then
CFLAGS_save="-Wall -Winline ${CFLAGS_save}"; CFLAGS="${CFLAGS_save}"
- CXXFLAGS_save="-Wall -Winline ${CXXFLAGS_save}"; CXXFLAGS="${CXXFLAGS_save}"
+ CXXFLAGS_save="-Wall ${CXXFLAGS_save}"; CXXFLAGS="${CXXFLAGS_save}"
OBJCFLAGS_save="-Wall -Winline ${OBJCFLAGS_save}"; OBJCFLAGS="${OBJCFLAGS_save}"
else
AC_CACHE_CHECK([if \$CC accepts -wall -winline],
CPPFLAGS="${CPPFLAGS_save}"
fi])
+dnl
+dnl wxWindows module
+dnl
+AC_ARG_ENABLE(wxwindows,
+ [ --enable-wxwindows wxWindows support (default enabled)])
+if test "x${enable_wxwindows}" != "xno"
+then
+ WXWINDOWS_PATH="${PATH}"
+ AC_ARG_WITH(wx-config-path,
+ [ --with-wx-config-path=PATH wx-config path (default search in \$PATH)],
+ [ if test "x${with_wx_config_path}" != "xno"
+ then
+ WXWINDOWS_PATH="${with_wx_config_path}:${PATH}"
+ fi ])
+ # look for wx-config
+ AC_PATH_PROG(WX_CONFIG, wx-config, no, ${WXWINDOWS_PATH})
+ if test "x${WX_CONFIG}" != "xno"
+ then
+ if expr 2.3.0 \> `${WX_CONFIG} --version` >/dev/null
+ then
+ AC_MSG_ERROR([Your development package for wxWindows is too old, you need at least version 2.3.0. Please upgrade and try again. Alternatively you can also configure with --disable-wxwindows.])
+ fi
+ CXXFLAGS_wxwindows="${CXXFLAGS_wxwindows} `${WX_CONFIG} --cflags`"
+ LDFLAGS_wxwindows="${LDFLAGS_wxwindows} `${WX_CONFIG} --libs`"
+ # now look for the wx.h header
+ CPPFLAGS="${save_CPPFLAGS} ${CXXFLAGS_wxwindows}"
+ ac_cv_wx_headers=yes
+ AC_CHECK_HEADERS(wx/wx.h, , [
+ ac_cv_wx_headers=no
+ echo "Cannot find wxWindows development headers."
+ ])
+ if test "x${ac_cv_wx_headers}" = "xyes"
+ then
+ PLUGINS="${PLUGINS} wxwindows"
+ ALIASES="${ALIASES} wxvlc"
+ fi
+ CPPFLAGS="${save_CPPFLAGS}"
+ fi
+fi
+
dnl
dnl Qt module
dnl
List of vlc plugins
-$Id: LIST,v 1.3 2002/10/23 23:17:45 gbazin Exp $
+$Id: LIST,v 1.4 2002/11/18 13:02:16 gbazin Exp $
* a52_system: input module for A52 decapsulation.
* waveout: simple audio output module for Windows.
+ * wxwindows: interface module using the cross-platform wxWindows library.
+
* x11: video output module using the X11 API.
* xvideo: video output module using the XVideo API.
gui/qnx/Modules.am \
gui/qt/Modules.am \
gui/win32/Modules.am \
+ gui/wxwindows/Modules.am \
misc/Modules.am \
misc/dummy/Modules.am \
misc/logger/Modules.am \
--- /dev/null
+.deps
+.dirstamp
--- /dev/null
+SOURCES_wxwindows = \
+ modules/gui/wxwindows/wxwindows.cpp \
+ modules/gui/wxwindows/interface.cpp \
+ modules/gui/wxwindows/timer.cpp
+
+noinst_HEADERS += \
+ modules/gui/wxwindows/wxwindows.h
+
+EXTRA_DIST += \
+ modules/gui/wxwindows/bitmaps/file.xpm \
+ modules/gui/wxwindows/bitmaps/disc.xpm \
+ modules/gui/wxwindows/bitmaps/net.xpm \
+ modules/gui/wxwindows/bitmaps/stop.xpm \
+ modules/gui/wxwindows/bitmaps/play.xpm \
+ modules/gui/wxwindows/bitmaps/pause.xpm \
+ modules/gui/wxwindows/bitmaps/playlist.xpm \
+ modules/gui/wxwindows/bitmaps/previous.xpm \
+ modules/gui/wxwindows/bitmaps/next.xpm
--- /dev/null
+/* XPM */
+static char * disc_xpm[] = {
+"24 24 138 2",
+" c None",
+". c #000000",
+"+ c #AEB3B3",
+"@ c #C6C9CD",
+"# c #D7D4DF",
+"$ c #ECDEF3",
+"% c #E7CBE9",
+"& c #D9B5D3",
+"* c #B1B7A5",
+"= c #B0B8AD",
+"- c #B3B9B6",
+"; c #C1C6C8",
+"> c #D5D3DC",
+", c #E5CAE6",
+"' c #E0BBD7",
+") c #E1ADC2",
+"! c #E3ACA3",
+"~ c #CAC1A4",
+"{ c #C5C7AC",
+"] c #B7BEAF",
+"^ c #ADB4AF",
+"/ c #BDC2C3",
+"( c #D1D0D8",
+"_ c #E5C7E4",
+": c #E0B6D1",
+"< c #E7A9B4",
+"[ c #EDCDB6",
+"} c #D6CFAE",
+"| c #DFA79F",
+"1 c #DDBFAA",
+"2 c #CFC5A9",
+"3 c #C1C4AC",
+"4 c #B2BAAF",
+"5 c #B6BBBB",
+"6 c #CDCED4",
+"7 c #E4C4E1",
+"8 c #E0AFC7",
+"9 c #EABCAE",
+"0 c #E1D6B6",
+"a c #C7CCAE",
+"b c #A2AB9A",
+"c c #E3ABC0",
+"d c #E6A3A7",
+"e c #DFBAA8",
+"f c #BDC2AE",
+"g c #E2BFDC",
+"h c #E7D6B8",
+"i c #ACB6A6",
+"j c #9DA89F",
+"k c #D9AFCF",
+"l c #E1B4D2",
+"m c #E2B0CB",
+"n c #E4A9BB",
+"o c #E2B2A6",
+"p c #6A6A6A",
+"q c #0D0D0D",
+"r c #A6B1A3",
+"s c #98A29C",
+"t c #8F9796",
+"u c #7E8485",
+"v c #E8C6E7",
+"w c #E5C2E3",
+"x c #E3BDDD",
+"y c #E1B6D5",
+"z c #8B9092",
+"A c #979EA2",
+"B c #A0A7AE",
+"C c #E7D3ED",
+"D c #E8D1ED",
+"E c #E8CEEC",
+"F c #E9CCEB",
+"G c #A7AEB7",
+"H c #B2B6C5",
+"I c #BABCCE",
+"J c #BFBED3",
+"K c #E9DFF0",
+"L c #E1D2F7",
+"M c #CAC7D2",
+"N c #C5C4CD",
+"O c #BFBFC7",
+"P c #B8B9C0",
+"Q c #AEAFB6",
+"R c #D5A8E1",
+"S c #D8B2E9",
+"T c #D9B8ED",
+"U c #DBBDF0",
+"V c #DCBFF1",
+"W c #A4A6AC",
+"X c #A8AAAF",
+"Y c #A0A6A8",
+"Z c #989E9C",
+"` c #A1A89E",
+" . c #B1B6A1",
+".. c #C08CAD",
+"+. c #CC90B5",
+"@. c #D394CA",
+"#. c #D6A2DB",
+"$. c #CFA7DF",
+"%. c #989F9B",
+"&. c #ACB3A0",
+"*. c #B9B9A4",
+"=. c #D0B8A8",
+"-. c #C5B5B8",
+";. c #B6BBAD",
+">. c #E3D7B5",
+",. c #DDB4A9",
+"'. c #CB89AC",
+"). c #C891B5",
+"!. c #D18DB7",
+"~. c #A1A798",
+"{. c #BDB9A5",
+"]. c #CAB5B7",
+"^. c #B8B1B1",
+"/. c #C2C8B2",
+"(. c #E1BFAF",
+"_. c #DB929A",
+":. c #BE82A6",
+"<. c #C891B4",
+"[. c #C78BB0",
+"}. c #BCB6A1",
+"|. c #CDB6B7",
+"1. c #C0B4B5",
+"2. c #B1B1AA",
+"3. c #CAD1B4",
+"4. c #E2C1B0",
+"5. c #DBA8A3",
+"6. c #D28AA9",
+"7. c #B77EA2",
+"8. c #BD89A9",
+"9. c #C9AFAF",
+"0. c #D0D6B5",
+"a. c #E2BFAF",
+"b. c #C684A7",
+"c. c #ACAAA6",
+"d. c #BDC3B0",
+"e. c #D2D7B5",
+"f. c #E2BFAE",
+"g. c #DBB6A8",
+" ",
+" ",
+" ",
+" . . . . . . ",
+" . . + @ # $ % & . . ",
+" . * = - ; > $ , ' ) ! . ",
+" . ~ { ] ^ / ( $ _ : < [ } . ",
+" . | 1 2 3 4 5 6 $ 7 8 9 0 a b . ",
+" . c d e 2 f ^ @ $ g < h a i j . ",
+" . k l m n o 2 p q q p [ a r s t u . ",
+" . v w x y m p . . p j t z A B . ",
+" . C D E F v q q A G H I J . ",
+" . K K K K K q q L L L L L . ",
+" . M N O P Q p . . p R S T U V . ",
+" . W X Y Z ` .p q q p ..+.@.#.R $.. ",
+" . %.` &.*.=.-.;.>.,.'...).!.@.. ",
+" . ~. .{.=.].^./.>.(._.:...<.[.. ",
+" . }.=.|.1.2.3.>.4.5.6.7.8.. ",
+" . 9.-.^.;.0.>.a.,._.b.. ",
+" . . c.d.e.>.f.g.. . ",
+" . . . . . . ",
+" ",
+" ",
+" "};
--- /dev/null
+/* XPM */
+static char * file_xpm[] = {
+"24 24 54 1",
+" c None",
+". c #000000",
+"+ c #0B0B0B",
+"@ c #A4946F",
+"# c #131313",
+"$ c #FEFEF7",
+"% c #FFFFFF",
+"& c #C0B59C",
+"* c #D5CEBD",
+"= c #C4BAA2",
+"- c #EFEDE7",
+"; c #C5BBA4",
+"> c #C5BBA3",
+", c #E9E5DC",
+"' c #D4CDBC",
+") c #AD9E7D",
+"! c #A99A77",
+"~ c #DAD4C5",
+"{ c #F1EEE8",
+"] c #B5A88A",
+"^ c #AFA281",
+"/ c #A59671",
+"( c #D5CDBC",
+"_ c #EBE8E0",
+": c #ECE8E0",
+"< c #CBC2AD",
+"[ c #B9AD91",
+"} c #B8AC8F",
+"| c #AA9B78",
+"1 c #F3F1EC",
+"2 c #C7BDA6",
+"3 c #B7AA8D",
+"4 c #B5A98B",
+"5 c #B4A789",
+"6 c #AB9C7B",
+"7 c #D7D1C1",
+"8 c #B7AB8E",
+"9 c #B6A98C",
+"0 c #B8AB8E",
+"a c #685E46",
+"b c #B3A688",
+"c c #B1A484",
+"d c #A89975",
+"e c #938463",
+"f c #D2CAB8",
+"g c #B4A788",
+"h c #CFC7B3",
+"i c #AEA07F",
+"j c #A79875",
+"k c #7D7155",
+"l c #C1B69D",
+"m c #A79774",
+"n c #8B7D5E",
+"o c #A0906C",
+" ",
+" ",
+" ",
+" ",
+" ",
+" .. ",
+" +..@@. ",
+" .. .#.@@@@$$%... ",
+" .@@..@@@@$$$$..&*. ",
+" .@@@@@$$$$$..=-;@. ",
+" .@@$$$$$..>,')!@. ",
+" .@@$$$..~{~]]^/@. ",
+" .@$$.(_:<[})|@@. ",
+" .@@$.12[3456@@@. ",
+" .@$.78]90)@@@a. ",
+" .@@.*]b9cd@e.. ",
+" .@.f]]g|@.. ",
+" .@.h4ijk. ",
+" ..lmn.. ",
+" ..o.. ",
+" .. ",
+" ",
+" ",
+" "};
--- /dev/null
+/* XPM */
+static char * net_xpm[] = {
+"24 24 30 1",
+" c None",
+". c #272727",
+"+ c #888888",
+"@ c #B0A5BA",
+"# c #7E6792",
+"$ c #3C284D",
+"% c #B8B0C1",
+"& c #87709D",
+"* c #70518A",
+"= c #6C4C85",
+"- c #65477C",
+"; c #513663",
+"> c #856E99",
+", c #4B365F",
+"' c #573E6D",
+") c #483259",
+"! c #372544",
+"~ c #4B335C",
+"{ c #776684",
+"] c #A898B5",
+"^ c #857991",
+"/ c #8A759B",
+"( c #747474",
+"_ c #9C89AA",
+": c #4D3663",
+"< c #A095AC",
+"[ c #65477E",
+"} c #7A5695",
+"| c #826A97",
+"1 c #412D52",
+" ",
+" ",
+" ",
+" ",
+" . ",
+" .+ ",
+" .@#..$ ",
+" .%&**=-;. ",
+" .>*.$,--. ",
+" . .. $'). ",
+" . . !'. ",
+" .. ~! ",
+" !{ !. ",
+" .]. . . ",
+" .^/. (. . ",
+" ._=:!.<[. ",
+" !:**}|=*. ",
+" 1!.=-. ",
+" .. ",
+" . ",
+" ",
+" ",
+" ",
+" "};
--- /dev/null
+/* XPM */
+static char * next_xpm[] = {
+"24 24 52 1",
+" c None",
+". c #000000",
+"+ c #F7F7F7",
+"@ c #CBD6CA",
+"# c #BECEBA",
+"$ c #E7EFE7",
+"% c #ACC8A9",
+"& c #EBF2EA",
+"* c #77A16E",
+"= c #E3EBE2",
+"- c #709867",
+"; c #F8F8F7",
+"> c #F1F5F0",
+", c #ECF2EB",
+"' c #E5EEE3",
+") c #E0EBDF",
+"! c #D8E6D6",
+"~ c #C6D9C2",
+"{ c #C5D7C3",
+"] c #B2CBB0",
+"^ c #AAC7A8",
+"/ c #0F1308",
+"( c #DDE6DB",
+"_ c #AEC8AD",
+": c #ABC7A8",
+"< c #AAC6A7",
+"[ c #A8C6A5",
+"} c #ADC8AD",
+"| c #A8C7A8",
+"1 c #A5C4A3",
+"2 c #7F9F76",
+"3 c #D6E1D4",
+"4 c #ABC7AA",
+"5 c #A7C5A4",
+"6 c #A9C7A6",
+"7 c #AFC8AD",
+"8 c #A4C3A2",
+"9 c #6B9060",
+"0 c #E4ECE3",
+"a c #A7B6A2",
+"b c #698D60",
+"c c #6B9063",
+"d c #445B2C",
+"e c #9FB79B",
+"f c #9FB199",
+"g c #5B7950",
+"h c #95A88F",
+"i c #9FAF99",
+"j c #789171",
+"k c #506B46",
+"l c #889D7F",
+"m c #475E3E",
+" ",
+" ",
+" ",
+" . .... ",
+" .. .+@. ",
+" .#. .$%. ",
+" .&*. .$%. ",
+" ........=%-. .$%. ",
+" .;>,')!~{]^-/ .$%. ",
+" .(_:::<[^}|12. .$%. ",
+" .34[5[6:%^:789. .0%. ",
+" .abccccccccccbd..ec. ",
+" .fgggggggggggd. .hg. ",
+" .iggggggggggd. .hg. ",
+" .jkkkkkkgggd. .hg. ",
+" ........kgd. .hg. ",
+" .kd. .hg. ",
+" .d. .hg. ",
+" .. .lm. ",
+" . .... ",
+" ",
+" ",
+" ",
+" "};
--- /dev/null
+/* XPM */
+static char * pause_xpm[] = {
+"24 24 48 1",
+" c None",
+". c #000000",
+"+ c #C1D6BD",
+"@ c #AEC5A8",
+"# c #A6BFA0",
+"$ c #778E6F",
+"% c #6B8661",
+"& c #6C8562",
+"* c #65815C",
+"= c #BDD3B8",
+"- c #AEC8AD",
+"; c #ABC7AA",
+"> c #698D60",
+", c #5B7950",
+"' c #506B46",
+") c #BFD4BB",
+"! c #ABC7A8",
+"~ c #A8C6A5",
+"{ c #6B9063",
+"] c #C2D7BE",
+"^ c #A7C5A4",
+"/ c #AAC6A7",
+"( c #A9C7A6",
+"_ c #8CA782",
+": c #B1CDAE",
+"< c #B4CEB1",
+"[ c #B0CAAD",
+"} c #AAC7A8",
+"| c #ACC8A9",
+"1 c #445B2C",
+"2 c #77A16E",
+"3 c #B2CBB0",
+"4 c #ADC8AD",
+"5 c #709867",
+"6 c #A8C7A8",
+"7 c #A5C4A3",
+"8 c #AFC8AD",
+"9 c #0F1308",
+"0 c #7F9F76",
+"a c #A4C3A2",
+"b c #6B9060",
+"c c #F3F3F3",
+"d c #C9DBC7",
+"e c #9FB79B",
+"f c #95A88F",
+"g c #889D7F",
+"h c #C7D3C6",
+"i c #475E3E",
+" ",
+" ",
+" ......... ",
+" .+@#$%&*. ",
+" .=-;>,,'. ",
+" .)!~{,,'. ",
+" .]!^{,,'. ",
+" .]!~{,,'. ",
+" .]/({,,'. ",
+" .....]~!{,,'..... ",
+" ._:<[}|{,,,''1. ",
+" .2|34}{,,,,1. ",
+" .5}6!{,,,1. ",
+" .578{,,1. ",
+" 90a{,1. ",
+" .b>1. ",
+" .1. ",
+" . ",
+" ................. ",
+" .cddddddeffffffg. ",
+" .h||||||{,,,,,,i. ",
+" ................. ",
+" ",
+" "};
--- /dev/null
+/* XPM */
+static char * play_xpm[] = {
+"24 24 41 1",
+" c None",
+". c #000000",
+"+ c #8CA782",
+"@ c #B1CDAE",
+"# c #77A16E",
+"$ c #B4CEB1",
+"% c #ACC8A9",
+"& c #709867",
+"* c #C1D6BD",
+"= c #BDD3B8",
+"- c #BFD4BB",
+"; c #C2D7BE",
+"> c #B0CAAD",
+", c #B2CBB0",
+"' c #AAC7A8",
+") c #0F1308",
+"! c #AEC5A8",
+"~ c #AEC8AD",
+"{ c #ABC7A8",
+"] c #AAC6A7",
+"^ c #A8C6A5",
+"/ c #ADC8AD",
+"( c #A8C7A8",
+"_ c #A5C4A3",
+": c #7F9F76",
+"< c #A6BFA0",
+"[ c #ABC7AA",
+"} c #A7C5A4",
+"| c #A9C7A6",
+"1 c #AFC8AD",
+"2 c #A4C3A2",
+"3 c #6B9060",
+"4 c #778E6F",
+"5 c #698D60",
+"6 c #6B9063",
+"7 c #445B2C",
+"8 c #6B8661",
+"9 c #5B7950",
+"0 c #6C8562",
+"a c #65815C",
+"b c #506B46",
+" ",
+" ",
+" ",
+" . ",
+" .. ",
+" .+. ",
+" .@#. ",
+" ........$%&. ",
+" .*=-;;;;>,'&) ",
+" .!~{{{]^'/(_:. ",
+" .<[^}^|{%'{123. ",
+" .45666666666657. ",
+" .8999999999997. ",
+" .099999999997. ",
+" .abbbbbb9997. ",
+" ........b97. ",
+" .b7. ",
+" .7. ",
+" .. ",
+" . ",
+" ",
+" ",
+" ",
+" "};
--- /dev/null
+/* XPM */
+static char * playlist_xpm[] = {
+"24 24 174 2",
+" c None",
+". c #000000",
+"+ c #FDFDFD",
+"@ c #F5F5F5",
+"# c #F6F6F6",
+"$ c #D0D0D0",
+"% c #C1C1C1",
+"& c #C3C3C3",
+"* c #C6C6C6",
+"= c #C8C8C8",
+"- c #8D8D8D",
+"; c #CACACA",
+"> c #919191",
+", c #EFEFEF",
+"' c #878787",
+") c #8A8A8A",
+"! c #5C5C5C",
+"~ c #F8F8F8",
+"{ c #EAEAEA",
+"] c #CCCCCC",
+"^ c #CECECE",
+"/ c #979797",
+"( c #CDCDCD",
+"_ c #A1A1A1",
+": c #090600",
+"< c #A3A3A3",
+"[ c #C5C5C5",
+"} c #C4C4C4",
+"| c #D1D1D1",
+"1 c #D2D2D1",
+"2 c #D2D2D2",
+"3 c #9A9A9A",
+"4 c #E8E8E8",
+"5 c #949494",
+"6 c #939393",
+"7 c #574F4F",
+"8 c #FDFDFC",
+"9 c #777777",
+"0 c #7E7E7E",
+"a c #9D9D9D",
+"b c #6B6B6B",
+"c c #F1F1F1",
+"d c #ECECEC",
+"e c #CFCFCF",
+"f c #575050",
+"g c #FDFAF8",
+"h c #A5A5A5",
+"i c #B9B9B9",
+"j c #EEEEEE",
+"k c #EDEDED",
+"l c #D5D5D5",
+"m c #BABABA",
+"n c #6D6767",
+"o c #F9F1EA",
+"p c #9E9E9E",
+"q c #B5B5B5",
+"r c #D9D9D9",
+"s c #D7D7D7",
+"t c #BCBCBC",
+"u c #625C5B",
+"v c #F9EEE4",
+"w c #4F4D4A",
+"x c #646464",
+"y c #747474",
+"z c #D6D6D5",
+"A c #DFDFDF",
+"B c #A0A0A0",
+"C c #615C5B",
+"D c #F9F0E4",
+"E c #746C67",
+"F c #FEFDFC",
+"G c #FFFEFD",
+"H c #131210",
+"I c #636363",
+"J c #7C7C7C",
+"K c #F3F2F2",
+"L c #98948F",
+"M c #F9EFE3",
+"N c #A09489",
+"O c #FEFDFD",
+"P c #766D68",
+"Q c #736961",
+"R c #A3A3A2",
+"S c #A6A6A6",
+"T c #DBDBDB",
+"U c #C7C7C7",
+"V c #E8E5E2",
+"W c #97938E",
+"X c #F6E9D8",
+"Y c #84817A",
+"Z c #FBF3EA",
+"` c #908C86",
+" . c #F1EDE7",
+".. c #7B7975",
+"+. c #878786",
+"@. c #070000",
+"#. c #FAFAFA",
+"$. c #DDDDDD",
+"%. c #E2DFDC",
+"&. c #A8A199",
+"*. c #F0E0CE",
+"=. c #C8BFB4",
+"-. c #D5CCBF",
+";. c #DFD7CD",
+">. c #DAD3C9",
+",. c #DDCFC4",
+"'. c #928C84",
+"). c #A8A8A8",
+"!. c #959595",
+"~. c #040000",
+"{. c #D9D5D2",
+"]. c #D9CABB",
+"^. c #D7C8B8",
+"/. c #DECFBF",
+"(. c #D8C9B9",
+"_. c #E3D3C2",
+":. c #C9BBAC",
+"<. c #D9CEC2",
+"[. c #7F766D",
+"}. c #909090",
+"|. c #D3D3D3",
+"1. c #060100",
+"2. c #C0BDBA",
+"3. c #8C8782",
+"4. c #C2B5A7",
+"5. c #BFB4A6",
+"6. c #B8AB9D",
+"7. c #BAAD9E",
+"8. c #BEB0A2",
+"9. c #948A7F",
+"0. c #716860",
+"a. c #E2E2E2",
+"b. c #A9A9A8",
+"c. c #332C2B",
+"d. c #5D5954",
+"e. c #79736C",
+"f. c #958C80",
+"g. c #8D8379",
+"h. c #988D82",
+"i. c #706760",
+"j. c #787878",
+"k. c #E4E4E4",
+"l. c #C2C2C2",
+"m. c #201A1A",
+"n. c #57514F",
+"o. c #625C59",
+"p. c #625A53",
+"q. c #6B625A",
+"r. c #585251",
+"s. c #696764",
+"t. c #080000",
+"u. c #989898",
+"v. c #B0B0B0",
+"w. c #AFAFAF",
+"x. c #999999",
+"y. c #9D9897",
+"z. c #050000",
+"A. c #0C0303",
+"B. c #080100",
+"C. c #030000",
+"D. c #282523",
+"E. c #5A5A5A",
+"F. c #868686",
+"G. c #ECE4E2",
+"H. c #DED7D5",
+"I. c #D8D1D0",
+"J. c #E0DBD7",
+"K. c #E9E6E3",
+"L. c #FCFBFA",
+"M. c #030500",
+"N. c #0B0505",
+"O. c #14100F",
+"P. c #090806",
+"Q. c #000100",
+" ",
+" . . . . . . . . . . . . . . . . . . . . ",
+" . + @ @ @ @ @ @ @ # # # # # # # # # $ . ",
+" . @ % % % & & & & * * * * * = = = = - . ",
+" . # & & & * * * * = = = = = ; ; ; ; > . ",
+" . , ' ' ' ) ) ) ) - - - - - > > > > ! . ",
+" . ~ { { { { { { { { { { { { { { { { ; . ",
+" . # ; ; ; ] ] ] ] ] ^ ^ ^ ^ $ $ $ $ / . ",
+" . # ] ] ] ( ^ ^ ^ _ : < [ } | 1 | 2 3 . ",
+" . 4 5 5 5 / / / 6 7 8 . 9 0 - a a a b . ",
+" . ~ c d d d d d e f g . h i $ j j k * . ",
+" . ~ 2 2 2 2 l l m n o . > p q r r r < . ",
+" . ~ l l l l s s t u v w . x . y p z < . ",
+" . A B B B B < 9 . C D E F . G H . I J . ",
+" . ~ @ , , , j . K L M N O P F Q R . S . ",
+" . ~ T T T T U . V W X Y Z ` ...+.@.< . ",
+" . #.$.$.$.$.& . %.&.*.=.-.;.>.,.'.@.p . ",
+" . { ).).).).!.~.{.].^./.(._.:.<.[.@.}.. ",
+" . #.@ c c c |.1.2.3.4.5.6.7.8.9.0.@.] . ",
+" . #.a.a.a.a.l b.c.d.e.f.g.9.h.i.. j.q . ",
+" . #.a.a.a.a.k.l.j.m.n.o.p.q.r.s.t.u.q . ",
+" . a.v.v.v.v.v.w.x.y.z.A.t.B.C.D.E.F.m . ",
+" . . . . . . . . . ~.G.H.I.J.K.L.M.. . . ",
+" ~.N.z.O.C.P.. Q. "};
--- /dev/null
+/* XPM */
+static char * previous_xpm[] = {
+"24 24 57 1",
+" c None",
+". c #000000",
+"+ c #F7F7F7",
+"@ c #CBD6CA",
+"# c #E7EFE7",
+"$ c #ACC8A9",
+"% c #C9DBC9",
+"& c #E6EEE5",
+"* c #BFCEBF",
+"= c #E7EFE6",
+"- c #BBCFBA",
+"; c #B3C4B3",
+"> c #E6EEE6",
+", c #B9CEB7",
+"' c #B5CEB5",
+") c #B7CCB5",
+"! c #BFD4BF",
+"~ c #C7D7C5",
+"{ c #DBE5DB",
+"] c #DAE5D9",
+"^ c #CBDAC9",
+"/ c #7EAB78",
+"( c #BAD1B9",
+"_ c #B3CAB1",
+": c #B0C9B0",
+"< c #B0C9AE",
+"[ c #AEC7AC",
+"} c #AAC5A8",
+"| c #A9C4A7",
+"1 c #698267",
+"2 c #E4ECE3",
+"3 c #2D2D2D",
+"4 c #E0EADE",
+"5 c #B3CCB1",
+"6 c #B0C7AE",
+"7 c #ADC6AB",
+"8 c #ADC8AB",
+"9 c #AAC7A8",
+"0 c #678C63",
+"a c #9FB79B",
+"b c #6B9063",
+"c c #C2CDC2",
+"d c #8EB48A",
+"e c #87AF84",
+"f c #87B083",
+"g c #88AF84",
+"h c #88B085",
+"i c #86AF82",
+"j c #547150",
+"k c #95A88F",
+"l c #5B7950",
+"m c #3C5235",
+"n c #4A6342",
+"o c #3B5035",
+"p c #415639",
+"q c #889D7F",
+"r c #475E3E",
+" ",
+" ",
+" ",
+" .... . ",
+" .+@. .. ",
+" .#$. .%. ",
+" .#$. .&*. ",
+" .#$. .=-;........ ",
+" .#$. .>,'),!~{]^/. ",
+" .#$. .>(_:<[}}}[|1. ",
+" .2$. 34567789[[6[80. ",
+" .ab..cdeeeeefgefhij. ",
+" .kl. .mllllllllllln. ",
+" .kl. .mlllllllllln. ",
+" .kl. .mllnoooooop. ",
+" .kl. .mln........ ",
+" .kl. .mn. ",
+" .kl. .n. ",
+" .qr. .. ",
+" .... . ",
+" ",
+" ",
+" ",
+" "};
--- /dev/null
+/* XPM */
+static char * stop_xpm[] = {
+"24 24 258 2",
+" c None",
+". c #010000",
+"+ c #180801",
+"@ c #2D1103",
+"# c #2C1003",
+"$ c #280F02",
+"% c #84320B",
+"& c #C75621",
+"* c #DC794A",
+"= c #DA7546",
+"- c #D77445",
+"; c #D37245",
+"> c #B74918",
+", c #772B09",
+"' c #250D02",
+") c #0B0400",
+"! c #88360E",
+"~ c #DF723D",
+"{ c #E47F4E",
+"] c #E1733D",
+"^ c #DA5A1C",
+"/ c #D65112",
+"( c #D14E11",
+"_ c #CC4C0F",
+": c #C7490F",
+"< c #C2460F",
+"[ c #BB430F",
+"} c #742909",
+"| c #0A0300",
+"1 c #150701",
+"2 c #B5450F",
+"3 c #E47B46",
+"4 c #E5733A",
+"5 c #E25813",
+"6 c #DF5613",
+"7 c #DB5412",
+"8 c #D04E10",
+"9 c #CA4B0F",
+"0 c #C5480F",
+"a c #BF450F",
+"b c #B9420E",
+"c c #97350B",
+"d c #130600",
+"e c #B3440F",
+"f c #E57944",
+"g c #E67034",
+"h c #E75A13",
+"i c #E95B13",
+"j c #E85B13",
+"k c #E45913",
+"l c #E05713",
+"m c #DA5312",
+"n c #D44F12",
+"o c #CD4D0F",
+"p c #C1460F",
+"q c #BB430E",
+"r c #B53F0D",
+"s c #93330B",
+"t c #090300",
+"u c #82340F",
+"v c #E17641",
+"w c #E46C2F",
+"x c #ED5D13",
+"y c #C94F10",
+"z c #C14B0F",
+"A c #E35813",
+"B c #DC5512",
+"C c #C6490F",
+"D c #AC3F0C",
+"E c #C3460F",
+"F c #BC430F",
+"G c #B6400E",
+"H c #B03D0D",
+"I c #6A2408",
+"J c #230C02",
+"K c #D7632C",
+"L c #E37A47",
+"M c #E95C13",
+"N c #A24919",
+"O c #9C7663",
+"P c #8C634D",
+"Q c #AA4410",
+"R c #DA5512",
+"S c #DE5612",
+"T c #C14B12",
+"U c #A0735D",
+"V c #B38C7A",
+"W c #A64F27",
+"X c #BC440F",
+"Y c #A93A0D",
+"Z c #1F0A01",
+"` c #7F3715",
+" . c #DE7A4A",
+".. c #AB8069",
+"+. c #FFFFFF",
+"@. c #DEB39D",
+"#. c #B14712",
+"$. c #C34D13",
+"%. c #A38272",
+"&. c #DBDBDB",
+"*. c #E6B49E",
+"=. c #C66035",
+"-. c #AA3A0D",
+";. c #642107",
+">. c #000000",
+",. c #C3683D",
+"'. c #D7602A",
+"). c #D95312",
+"!. c #DF5713",
+"~. c #E55913",
+"{. c #AB7255",
+"]. c #D8AF9B",
+"^. c #AC8978",
+"/. c #DADADA",
+"(. c #DC997B",
+"_. c #CA6D44",
+":. c #B5400E",
+"<. c #AF3D0D",
+"[. c #7F2B09",
+"}. c #100500",
+"|. c #D57548",
+"1. c #BC4A11",
+"2. c #B18771",
+"3. c #E7B39C",
+"4. c #CE724A",
+"5. c #C7663C",
+"6. c #B43F0D",
+"7. c #AE3C0D",
+"8. c #A8390C",
+"9. c #8E2F0A",
+"0. c #220C03",
+"a. c #D24E11",
+"b. c #D75112",
+"c. c #DD5512",
+"d. c #DE5714",
+"e. c #AF8673",
+"f. c #E8B49D",
+"g. c #D3774E",
+"h. c #C3592A",
+"i. c #B7410E",
+"j. c #B23E0D",
+"k. c #AC3B0D",
+"l. c #A6380C",
+"m. c #852C08",
+"n. c #1F0A02",
+"o. c #210C03",
+"p. c #D17045",
+"q. c #C8490F",
+"r. c #D45012",
+"s. c #D85415",
+"t. c #B28F7D",
+"u. c #EBC1AF",
+"v. c #C55625",
+"w. c #BA420E",
+"x. c #A4370C",
+"y. c #742606",
+"z. c #1A0801",
+"A. c #0D0400",
+"B. c #CC6E45",
+"C. c #C4470F",
+"D. c #CB4B0F",
+"E. c #CE4D0F",
+"F. c #A8410E",
+"G. c #B18D7D",
+"H. c #ECECEC",
+"I. c #EBC8B9",
+"J. c #BD5123",
+"K. c #AD3B0D",
+"L. c #A7380C",
+"M. c #A2360B",
+"N. c #672005",
+"O. c #0E0400",
+"P. c #AD5129",
+"Q. c #BE450F",
+"R. c #AA3E0C",
+"S. c #A7745D",
+"T. c #E6B39C",
+"U. c #DCA892",
+"V. c #B64F25",
+"W. c #8E2F09",
+"X. c #5F1E05",
+"Y. c #804A32",
+"Z. c #BD440F",
+"`. c #97360B",
+" + c #A87D6B",
+".+ c #E5B29C",
+"++ c #C96335",
+"@+ c #C45729",
+"#+ c #E2B19B",
+"$+ c #DBA995",
+"%+ c #B4512A",
+"&+ c #9A330A",
+"*+ c #7C2807",
+"=+ c #441504",
+"-+ c #190801",
+";+ c #BC5B32",
+">+ c #9A3E17",
+",+ c #C08E78",
+"'+ c #D89375",
+")+ c #C66034",
+"!+ c #BF5426",
+"~+ c #BC5427",
+"{+ c #D28E72",
+"]+ c #D9A38D",
+"^+ c #B4542D",
+"/+ c #AF4C24",
+"(+ c #872C08",
+"_+ c #712506",
+":+ c #160600",
+"<+ c #672B11",
+"[+ c #BB582E",
+"}+ c #B64717",
+"|+ c #C05A2F",
+"1+ c #B85025",
+"2+ c #B8552E",
+"3+ c #B3512A",
+"4+ c #B05029",
+"5+ c #973109",
+"6+ c #6F2307",
+"7+ c #471604",
+"8+ c #050100",
+"9+ c #872E0A",
+"0+ c #B7532A",
+"a+ c #B44B1F",
+"b+ c #A1360B",
+"c+ c #963109",
+"d+ c #6C2106",
+"e+ c #5D1D05",
+"f+ c #0C0300",
+"g+ c #832C0A",
+"h+ c #B4552E",
+"i+ c #B0481F",
+"j+ c #A5370C",
+"k+ c #A2360C",
+"l+ c #9F350B",
+"m+ c #7B2707",
+"n+ c #641F06",
+"o+ c #652006",
+"p+ c #0B0300",
+"q+ c #040100",
+"r+ c #5A1E06",
+"s+ c #A1360C",
+"t+ c #A2370C",
+"u+ c #822A08",
+"v+ c #661F05",
+"w+ c #702406",
+"x+ c #511905",
+"y+ c #140600",
+"z+ c #561D06",
+"A+ c #752707",
+"B+ c #892C08",
+"C+ c #7F2907",
+"D+ c #642005",
+"E+ c #5E1D05",
+"F+ c #4D1804",
+"G+ c #150600",
+"H+ c #080200",
+"I+ c #160701",
+" ",
+" . + @ # + . ",
+" $ % & * = - ; > , ' ",
+" ) ! ~ { ] ^ / ( _ : < [ } | ",
+" 1 2 3 4 5 5 6 7 / 8 9 0 a b c d ",
+" | e f g h i j k l m n o : p q r s t ",
+" u v w h x y z i A B / C D E F G H I ",
+" J K L A M N O P Q R S T U V W X G H Y Z ",
+" ` .7 5 j ..+.+.@.#.$.%.&.+.*.=.G H -.;. ",
+" >.,.'.).!.~.{.+.+.+.].^./.+.+.(._.:.<.Y [.>. ",
+" }.|.8 / 7 l 1.2.+.+.+.+.+.+.3.4.5.6.7.8.9.}. ",
+" 0.; _ a.b.m c.d.e.+.+.+.+.f.g.h.i.j.k.l.m.n. ",
+" o.p.q._ ( r.b.s.t.+.+.+.+.u.v.w.r H -.x.y.z. ",
+" A.B.C.: D.E.F.G.H.+.+.+.+.+.I.J.j.K.L.M.N.O. ",
+" >.P.Q.< 0 R.S.+.+.+.3.T.+.+.+.U.V.Y x.W.X.>. ",
+" Y.b Z.a `. ++.+..+++@+#++.+.$+%+l.&+*+=+ ",
+" -+;+i.b q >+,+'+)+w.!+~+{+]+^+/+M.(+_+:+ ",
+" <+[+}+:.G |+|+:.6.j.1+2+3+4+M.5+6+7+ ",
+" 8+9+0+a+H H H H 7.k.-.L.x.b+c+d+e+8+ ",
+" f+g+h+i+-.-.Y 8.l.j+k+l+m+n+o+p+ ",
+" q+r+s+x.x.x.t+b+l+u+v+w+x+8+ ",
+" y+z+A+B+C+D+o+E+F+G+ ",
+" >.H+I+I+H+>. ",
+" "};
--- /dev/null
+/*****************************************************************************
+ * interface.cpp : wxWindows plugin for vlc
+ *****************************************************************************
+ * Copyright (C) 2000-2001 VideoLAN
+ * $Id: interface.cpp,v 1.1 2002/11/18 13:02:16 gbazin Exp $
+ *
+ * Authors: Gildas Bazin <gbazin@netcourrier.com>
+ *
+ * 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.
+ *****************************************************************************/
+
+/*****************************************************************************
+ * Preamble
+ *****************************************************************************/
+#include <stdlib.h> /* malloc(), free() */
+#include <errno.h> /* ENOMEM */
+#include <string.h> /* strerror() */
+#include <stdio.h>
+
+#include <vlc/vlc.h>
+#include <vlc/intf.h>
+
+/* Let wxWindows take care of the i18n stuff */
+#undef _
+
+#ifdef WIN32 /* mingw32 hack */
+#undef Yield()
+#undef CreateDialog()
+#endif
+
+#include <wx/wxprec.h>
+#include <wx/wx.h>
+
+#include "wxwindows.h"
+#include "wx/artprov.h"
+
+/* include the toolbar graphics */
+#include "bitmaps/file.xpm"
+#include "bitmaps/disc.xpm"
+#include "bitmaps/net.xpm"
+#include "bitmaps/play.xpm"
+#include "bitmaps/pause.xpm"
+#include "bitmaps/stop.xpm"
+#include "bitmaps/previous.xpm"
+#include "bitmaps/next.xpm"
+#include "bitmaps/playlist.xpm"
+/*****************************************************************************
+ * Event Table.
+ *****************************************************************************/
+
+const int ID_TOOLBAR = 500;
+
+/* IDs for the controls and the menu commands */
+enum
+{
+ /* menu items */
+ Exit_Event = 1,
+ OpenFile_Event,
+ OpenDisc_Event,
+ OpenNet_Event,
+ OpenSat_Event,
+ EjectDisc_Event,
+
+ Logs_Event,
+
+ Audio_Event,
+ Subtitles_Event,
+ Prefs_Event,
+
+ SliderScroll_Event,
+ StopStream_Event,
+ PlayStream_Event,
+ PauseStream_Event,
+ PrevStream_Event,
+ NextStream_Event
+
+ /* it is important for the id corresponding to the "About" command to have
+ * this standard value as otherwise it won't be handled properly under Mac
+ * (where it is special and put into the "Apple" menu) */
+ About_Event = wxID_ABOUT,
+};
+
+BEGIN_EVENT_TABLE(Interface, wxFrame)
+ /* Menu events */
+ EVT_MENU(Exit_Event, Interface::OnExit)
+ EVT_MENU(About_Event, Interface::OnAbout)
+ EVT_MENU(OpenFile_Event, Interface::OnOpenFile)
+ /* Toolbar events */
+ EVT_MENU(OpenFile_Event, Interface::OnOpenFile)
+ EVT_MENU(StopStream_Event, Interface::OnStopStream)
+ EVT_MENU(PlayStream_Event, Interface::OnPlayStream)
+ EVT_MENU(PauseStream_Event, Interface::OnPauseStream)
+ EVT_MENU(PrevStream_Event, Interface::OnPrevStream)
+ EVT_MENU(NextStream_Event, Interface::OnNextStream)
+ /* Slider events */
+ EVT_COMMAND_SCROLL(SliderScroll_Event, Interface::OnSliderUpdate)
+END_EVENT_TABLE()
+
+/*****************************************************************************
+ * Constructor.
+ *****************************************************************************/
+Interface::Interface( intf_thread_t *_p_intf ):
+ wxFrame( NULL, -1, "title", wxDefaultPosition, wxDefaultSize,
+ wxDEFAULT_FRAME_STYLE )
+{
+
+ /* Initializations */
+ p_intf = _p_intf;
+
+ /* Give our interface a nice icon */
+ //SetIcon( wxICON(vlcicon) );
+
+ /* Create our "File" menu */
+#define HELP_FILE N_("Open a file")
+#define HELP_DISC N_("Open a DVD or (S)VCD")
+#define HELP_NET N_("Open a network stream")
+#define HELP_SAT N_("Open a satellite stream")
+#define HELP_EJECT N_("Eject the DVD/CD")
+#define HELP_EXIT N_("Exit this program")
+ wxMenu *file_menu = new wxMenu;
+ file_menu->Append( OpenFile_Event, _("&Open File..."), HELP_FILE );
+ file_menu->Append( OpenDisc_Event, _("Open &Disc..."), HELP_DISC );
+ file_menu->Append( OpenNet_Event, _("&Network Stream..."), HELP_NET );
+#if 0
+ file_menu->Append( OpenSat_Event, _("&Satellite Stream..."), HELP_NET );
+#endif
+ file_menu->AppendSeparator();
+ file_menu->Append( EjectDisc_Event, _("&Eject Disc"), HELP_EJECT );
+ file_menu->AppendSeparator();
+ file_menu->Append( Exit_Event, _("E&xit"), HELP_EXIT );
+
+ /* Create our "View" menu */
+#define HELP_LOGS N_("Show the program logs")
+ wxMenu *view_menu = new wxMenu;
+ view_menu->Append( Logs_Event, _("&Logs..."), HELP_LOGS );
+
+ /* Create our "Settings" menu */
+#define HELP_AUDIO N_("Change the current audio track")
+#define HELP_SUBS N_("Change the current subtitles stream")
+#define HELP_PREFS N_("Go to the preferences menu")
+ wxMenu *settings_menu = new wxMenu;
+ settings_menu->Append( Audio_Event, _("&Audio"), HELP_AUDIO );
+ settings_menu->Append( Subtitles_Event, _("&Subtitles"), HELP_SUBS );
+ settings_menu->AppendSeparator();
+ settings_menu->Append( Prefs_Event, _("&Preferences..."), HELP_PREFS );
+
+ /* Create our "Help" menu */
+#define HELP_ABOUT N_("About this program")
+ wxMenu *help_menu = new wxMenu;
+ help_menu->Append( About_Event, _("&About..."), HELP_ABOUT );
+
+ /* Append the freshly created menus to the menu bar... */
+ wxMenuBar *menubar = new wxMenuBar( wxMB_DOCKABLE );
+ menubar->Append( file_menu, _("&File") );
+ menubar->Append( view_menu, _("&View") );
+ menubar->Append( settings_menu, _("&Settings") );
+ menubar->Append( help_menu, _("&Help") );
+
+ /* Attach the menu bar to the frame */
+ SetMenuBar( menubar );
+
+ /* Create toolbar */
+#define HELP_STOP N_("Stop current playlist item")
+#define HELP_PLAY N_("Play current playlist item")
+#define HELP_PAUSE N_("Pause current playlist item")
+#define HELP_PLO N_("Open playlist")
+#define HELP_PLP N_("Previous playlist item")
+#define HELP_PLN N_("Next playlist item")
+ wxBitmap *p_bmp_file = new wxBitmap( file_xpm );
+ wxBitmap *p_bmp_disc = new wxBitmap( disc_xpm );
+ wxBitmap *p_bmp_net = new wxBitmap( net_xpm );
+ wxBitmap *p_bmp_play = new wxBitmap( play_xpm );
+ wxBitmap *p_bmp_stop = new wxBitmap( stop_xpm );
+ wxBitmap *p_bmp_pause = new wxBitmap( pause_xpm );
+ wxBitmap *p_bmp_prev = new wxBitmap( previous_xpm );
+ wxBitmap *p_bmp_next = new wxBitmap( next_xpm );
+ wxBitmap *p_bmp_playlist = new wxBitmap( playlist_xpm );
+
+ wxToolBar *toolbar = CreateToolBar(
+ wxTB_HORIZONTAL | wxTB_TEXT | wxTB_FLAT | wxTB_DOCKABLE, ID_TOOLBAR );
+
+ toolbar->AddTool( OpenFile_Event, _("File"), *p_bmp_file, HELP_FILE );
+ toolbar->AddTool( OpenFile_Event, _("Disc"), *p_bmp_disc, HELP_DISC );
+ toolbar->AddTool( OpenFile_Event, _("Net"), *p_bmp_net, HELP_NET );
+#if 0
+ toolbar->AddTool( OpenFile_Event, _("Sat"), *p_bmp_net, HELP_SAT );
+#endif
+ toolbar->AddSeparator();
+ toolbar->AddTool( StopStream_Event, _("Stop"), *p_bmp_stop, HELP_STOP );
+ toolbar->AddTool( PlayStream_Event, _("Play"), *p_bmp_play, HELP_PLAY );
+ toolbar->AddTool( PauseStream_Event, _("Pause"), *p_bmp_pause, HELP_PAUSE);
+ toolbar->AddSeparator();
+ toolbar->AddTool( wxID_OPEN, _("Playlist"), *p_bmp_playlist, HELP_PLO );
+ toolbar->AddTool( PrevStream_Event, _("Prev"), *p_bmp_prev, HELP_PLP );
+ toolbar->AddTool( NextStream_Event, _("Next"), *p_bmp_next, HELP_PLN );
+
+ toolbar->Realize();
+
+ /* Create slider */
+ wxBoxSizer *slider_sizer = new wxBoxSizer( wxVERTICAL );
+ slider = new wxSlider( this, SliderScroll_Event, 0, 0, 100,
+ wxDefaultPosition, wxSize( 450, 50 ),
+ wxSL_HORIZONTAL | wxSL_AUTOTICKS | wxSL_TOP );
+ slider_sizer->Add( slider, 0, wxGROW | wxALL | wxALIGN_CENTER, 5 );
+
+ /* use the sizer for layout */
+ slider->Hide();
+ slider_sizer->Layout();
+ SetSizerAndFit( slider_sizer );
+
+ /* Give the frame an optional statusbar. The '1' just means one field.
+ * A gripsizer will automatically get put on into the corner, if that
+ * is the normal OS behaviour for frames on that platform. Helptext
+ * for menu items and toolbar tools will automatically get displayed
+ * here. */
+ statusbar = CreateStatusBar(2);
+ int i_status_width[2] = {-1,-2};
+ statusbar->SetStatusWidths( 2, i_status_width );
+
+ SetTitle( COPYRIGHT_MESSAGE );
+ SetAutoLayout( TRUE );
+ Layout();
+}
+
+Interface::~Interface()
+{
+}
+
+/*****************************************************************************
+ * Private methods.
+ *****************************************************************************/
+void Interface::OnExit( wxCommandEvent& WXUNUSED(event) )
+{
+ /* TRUE is to force the frame to close. */
+ Close(TRUE);
+}
+
+void Interface::OnAbout( wxCommandEvent& WXUNUSED(event) )
+{
+ wxString msg;
+ msg.Printf( _("This is the about dialog of the VideoLAN Client.\n") );
+
+ wxMessageBox( msg, "About VideoLAN Client",
+ wxOK | wxICON_INFORMATION, this );
+}
+
+void Interface::OnOpenFile( wxCommandEvent& WXUNUSED(event) )
+{
+ wxFileDialog dialog
+ (
+ this,
+ _T("Open file dialog"),
+ _T(""),
+ _T(""),
+ _T("*.*")
+ );
+
+ if (dialog.ShowModal() == wxID_OK)
+ {
+ wxString info;
+ info.Printf(_T("Full file name: %s\n")
+ _T("Path: %s\n")
+ _T("Name: %s"),
+ dialog.GetPath().c_str(),
+ dialog.GetDirectory().c_str(),
+ dialog.GetFilename().c_str());
+ wxMessageDialog dialog2(this, info, _T("Selected file"));
+ dialog2.ShowModal();
+ }
+}
+
+void Interface::OnPlayStream( wxCommandEvent& WXUNUSED(event) )
+{
+ wxCommandEvent dummy;
+ playlist_t *p_playlist =
+ (playlist_t *)vlc_object_find( p_intf, VLC_OBJECT_PLAYLIST,
+ FIND_ANYWHERE );
+ if( p_playlist == NULL )
+ {
+ OnOpenFile( dummy );
+ return;
+ }
+
+ /* If the playlist is empty, open a file requester instead */
+ vlc_mutex_lock( &p_playlist->object_lock );
+ if( p_playlist->i_size )
+ {
+ vlc_mutex_unlock( &p_playlist->object_lock );
+ playlist_Play( p_playlist );
+ vlc_object_release( p_playlist );
+ }
+ else
+ {
+ vlc_mutex_unlock( &p_playlist->object_lock );
+ vlc_object_release( p_playlist );
+ OnOpenFile( dummy );
+ }
+}
+
+void Interface::OnStopStream( wxCommandEvent& WXUNUSED(event) )
+{
+ playlist_t * p_playlist =
+ (playlist_t *)vlc_object_find( p_intf, VLC_OBJECT_PLAYLIST,
+ FIND_ANYWHERE );
+ if( p_playlist == NULL )
+ {
+ return;
+ }
+
+ playlist_Stop( p_playlist );
+ vlc_object_release( p_playlist );
+}
+
+void Interface::OnPauseStream( wxCommandEvent& WXUNUSED(event) )
+{
+ if( p_intf->p_sys->p_input == NULL )
+ {
+ return;
+ }
+
+ input_SetStatus( p_intf->p_sys->p_input, INPUT_STATUS_PAUSE );
+}
+
+void Interface::OnSliderUpdate( wxScrollEvent& event )
+{
+ p_intf->p_sys->i_slider_pos = event.GetPosition();
+}
+
+void Interface::OnPrevStream( wxCommandEvent& WXUNUSED(event) )
+{
+ playlist_t * p_playlist =
+ (playlist_t *)vlc_object_find( p_intf, VLC_OBJECT_PLAYLIST,
+ FIND_ANYWHERE );
+ if( p_playlist == NULL )
+ {
+ return;
+ }
+
+ playlist_Prev( p_playlist );
+ vlc_object_release( p_playlist );
+}
+
+void Interface::OnNextStream( wxCommandEvent& WXUNUSED(event) )
+{
+ playlist_t * p_playlist =
+ (playlist_t *)vlc_object_find( p_intf, VLC_OBJECT_PLAYLIST,
+ FIND_ANYWHERE );
+ if( p_playlist == NULL )
+ {
+ return;
+ }
+
+ playlist_Next( p_playlist );
+ vlc_object_release( p_playlist );
+}
--- /dev/null
+/*****************************************************************************
+ * timer.cpp : wxWindows plugin for vlc
+ *****************************************************************************
+ * Copyright (C) 2000-2001 VideoLAN
+ * $Id: timer.cpp,v 1.1 2002/11/18 13:02:16 gbazin Exp $
+ *
+ * Authors: Gildas Bazin <gbazin@netcourrier.com>
+ *
+ * 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.
+ *****************************************************************************/
+
+/*****************************************************************************
+ * Preamble
+ *****************************************************************************/
+#include <stdlib.h> /* malloc(), free() */
+#include <errno.h> /* ENOMEM */
+#include <string.h> /* strerror() */
+#include <stdio.h>
+
+#include <vlc/vlc.h>
+#include <vlc/intf.h>
+
+/* Let wxWindows take care of the i18n stuff */
+#undef _
+
+#ifdef WIN32 /* mingw32 hack */
+#undef Yield()
+#undef CreateDialog()
+#endif
+
+#include <wx/wxprec.h>
+#include <wx/wx.h>
+#include <wx/timer.h>
+
+#include "wxwindows.h"
+
+/*****************************************************************************
+ * Constructor.
+ *****************************************************************************/
+Timer::Timer( intf_thread_t *_p_intf, Interface *_p_main_interface )
+{
+ p_intf = _p_intf;
+ p_main_interface = _p_main_interface;
+
+ Start( 100 /*milliseconds*/, wxTIMER_CONTINUOUS );
+}
+
+Timer::~Timer()
+{
+}
+
+/*****************************************************************************
+ * Private methods.
+ *****************************************************************************/
+/*****************************************************************************
+ * wxModeManage: actualise the aspect of the interface whenever the input
+ * changes.
+ *****************************************************************************
+ * The lock has to be taken before you call the function.
+ *****************************************************************************/
+static int wxModeManage( intf_thread_t * p_intf )
+{
+ return 0;
+}
+
+/*****************************************************************************
+ * wxSetupMenus: function that generates title/chapter/audio/subpic
+ * menus with help from preceding functions
+ *****************************************************************************
+ * Function called with the lock on stream
+ *****************************************************************************/
+static int wxSetupMenus( intf_thread_t * p_intf )
+{
+ return 0;
+}
+
+/*****************************************************************************
+ * Manage: manage main thread messages
+ *****************************************************************************
+ * In this function, called approx. 10 times a second, we check what the
+ * main program wanted to tell us.
+ *****************************************************************************/
+void Timer::Notify()
+{
+ int i_start, i_stop;
+
+ vlc_mutex_lock( &p_intf->change_lock );
+
+ /* If the "display popup" flag has changed */
+ if( p_intf->b_menu_change )
+ {
+ p_intf->b_menu_change = 0;
+ }
+
+ /* Update the log window */
+ vlc_mutex_lock( p_intf->p_sys->p_sub->p_lock );
+ i_stop = *p_intf->p_sys->p_sub->pi_stop;
+ vlc_mutex_unlock( p_intf->p_sys->p_sub->p_lock );
+
+ if( p_intf->p_sys->p_sub->i_start != i_stop )
+ {
+ }
+
+ /* Update the input */
+ if( p_intf->p_sys->p_input == NULL )
+ {
+ p_intf->p_sys->p_input = (input_thread_t *)vlc_object_find( p_intf,
+ VLC_OBJECT_INPUT,
+ FIND_ANYWHERE );
+ /* Show slider */
+ if(p_intf->p_sys->p_input)
+ {
+ p_main_interface->slider->Show();
+ p_main_interface->statusbar->SetStatusText(
+ p_intf->p_sys->p_input->psz_source, 1 );
+ }
+ }
+ else if( p_intf->p_sys->p_input->b_dead )
+ {
+ /* Hide slider */
+ if(p_intf->p_sys->p_input)
+ p_main_interface->slider->Hide();
+
+ p_main_interface->statusbar->SetStatusText( "", 1 );
+
+ vlc_object_release( p_intf->p_sys->p_input );
+ p_intf->p_sys->p_input = NULL;
+ }
+
+ if( p_intf->p_sys->p_input )
+ {
+ input_thread_t *p_input = p_intf->p_sys->p_input;
+
+ vlc_mutex_lock( &p_input->stream.stream_lock );
+
+ if( !p_input->b_die )
+ {
+ /* New input or stream map change */
+ if( p_input->stream.b_changed )
+ {
+ wxModeManage( p_intf );
+ wxSetupMenus( p_intf );
+ p_intf->p_sys->b_playing = 1;
+ }
+
+ /* Manage the slider */
+ if( p_input->stream.b_seekable && p_intf->p_sys->b_playing )
+ {
+
+ stream_position_t position;
+
+ /* If the user hasn't touched the slider since the last time,
+ * then the input can safely change it */
+ if( p_intf->p_sys->i_slider_pos ==
+ p_intf->p_sys->i_slider_oldpos )
+ {
+ /* Update the value */
+ vlc_mutex_unlock( &p_input->stream.stream_lock );
+ input_Tell( p_input, &position );
+ vlc_mutex_lock( &p_input->stream.stream_lock );
+ p_intf->p_sys->i_slider_oldpos =
+ ( 100 * position.i_tell ) / position.i_size;
+
+ if( p_intf->p_sys->i_slider_pos !=
+ p_intf->p_sys->i_slider_oldpos )
+ {
+ p_intf->p_sys->i_slider_pos =
+ p_intf->p_sys->i_slider_oldpos;
+
+ p_main_interface->slider->SetValue(
+ p_intf->p_sys->i_slider_pos );
+ }
+ }
+
+ /* Otherwise, send message to the input if the user has
+ * finished dragging the slider */
+ else if( p_intf->p_sys->b_slider_free )
+ {
+ /* release the lock to be able to seek */
+ vlc_mutex_unlock( &p_input->stream.stream_lock );
+ input_Seek( p_input, p_intf->p_sys->i_slider_pos,
+ INPUT_SEEK_PERCENT | INPUT_SEEK_SET );
+ vlc_mutex_lock( &p_input->stream.stream_lock );
+
+ /* Update the old value */
+ p_intf->p_sys->i_slider_oldpos =
+ p_intf->p_sys->i_slider_pos;
+ }
+ }
+
+ if( p_intf->p_sys->i_part !=
+ p_input->stream.p_selected_area->i_part )
+ {
+ p_intf->p_sys->b_chapter_update = 1;
+ wxSetupMenus( p_intf );
+ }
+ }
+
+ vlc_mutex_unlock( &p_input->stream.stream_lock );
+ }
+ else if( p_intf->p_sys->b_playing && !p_intf->b_die )
+ {
+ wxModeManage( p_intf );
+ p_intf->p_sys->b_playing = 0;
+ }
+
+ vlc_mutex_unlock( &p_intf->change_lock );
+}
--- /dev/null
+/*****************************************************************************
+ * wxwindows.cpp : wxWindows plugin for vlc
+ *****************************************************************************
+ * Copyright (C) 2000-2001 VideoLAN
+ * $Id: wxwindows.cpp,v 1.1 2002/11/18 13:02:16 gbazin Exp $
+ *
+ * Authors: Gildas Bazin <gbazin@netcourrier.com>
+ *
+ * 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.
+ *****************************************************************************/
+
+/*****************************************************************************
+ * Preamble
+ *****************************************************************************/
+#include <stdlib.h> /* malloc(), free() */
+#include <errno.h> /* ENOMEM */
+#include <string.h> /* strerror() */
+#include <stdio.h>
+
+#include <vlc/vlc.h>
+#include <vlc/intf.h>
+
+/* Let wxWindows take care of the i18n stuff */
+#undef _
+
+#ifdef WIN32 /* mingw32 hack */
+#undef Yield()
+#undef CreateDialog()
+#endif
+
+#include <wx/wxprec.h>
+#include <wx/wx.h>
+#include <wx/imagpng.h>
+
+#include "wxwindows.h"
+
+/*****************************************************************************
+ * Local prototypes.
+ *****************************************************************************/
+static int Open ( vlc_object_t * );
+static void Close ( vlc_object_t * );
+
+static void Run ( intf_thread_t * );
+
+/*****************************************************************************
+ * Local classes declarations.
+ *****************************************************************************/
+class Instance: public wxApp
+{
+public:
+ Instance();
+ Instance( intf_thread_t *_p_intf );
+
+ bool OnInit();
+
+private:
+ intf_thread_t *p_intf;
+};
+
+/*****************************************************************************
+ * Module descriptor
+ *****************************************************************************/
+vlc_module_begin();
+ add_category_hint( N_("wxWindows"), NULL );
+ set_description( (char *) _("wxWindows interface module") );
+ set_capability( "interface", 50 );
+ set_callbacks( Open, Close );
+ set_program( "wxvlc" );
+vlc_module_end();
+
+/*****************************************************************************
+ * Open: initialize and create window
+ *****************************************************************************/
+static int Open( vlc_object_t *p_this )
+{
+ intf_thread_t *p_intf = (intf_thread_t *)p_this;
+
+ /* Allocate instance and initialize some members */
+ p_intf->p_sys = (intf_sys_t *)malloc( sizeof( intf_sys_t ) );
+ if( p_intf->p_sys == NULL )
+ {
+ msg_Err( p_intf, "out of memory" );
+ return VLC_ENOMEM;
+ }
+
+ p_intf->pf_run = Run;
+
+ p_intf->p_sys->p_sub = msg_Subscribe( p_intf );
+
+ /* Initialize wxWindows thread */
+ p_intf->p_sys->b_playing = 0;
+ p_intf->p_sys->b_popup_changed = 0;
+ p_intf->p_sys->b_window_changed = 0;
+ p_intf->p_sys->b_playlist_changed = 0;
+
+ p_intf->p_sys->p_input = NULL;
+ p_intf->p_sys->i_playing = -1;
+ p_intf->p_sys->b_slider_free = 1;
+ p_intf->p_sys->i_slider_pos = p_intf->p_sys->i_slider_oldpos = 0;
+
+ p_intf->p_sys->i_part = -1;
+
+ return VLC_SUCCESS;
+}
+
+/*****************************************************************************
+ * Close: destroy interface window
+ *****************************************************************************/
+static void Close( vlc_object_t *p_this )
+{
+ intf_thread_t *p_intf = (intf_thread_t *)p_this;
+
+ if( p_intf->p_sys->p_input )
+ {
+ vlc_object_release( p_intf->p_sys->p_input );
+ }
+
+ msg_Unsubscribe( p_intf, p_intf->p_sys->p_sub );
+
+ /* Destroy structure */
+ free( p_intf->p_sys );
+}
+
+/*****************************************************************************
+ * Run: wxWindows thread
+ *****************************************************************************/
+static void Run( intf_thread_t *p_intf )
+{
+ static char *p_args[] = { "" };
+
+ /* Hack to pass the p_intf pointer to the new wxWindow Instance object */
+ wxTheApp = new Instance( p_intf );
+
+#if defined( WIN32 )
+ wxEntry( GetModuleHandle(NULL), NULL, NULL, SW_SHOW, TRUE );
+#else
+ wxEntry( 1, p_args );
+#endif
+}
+
+/* following functions are local */
+
+/*****************************************************************************
+ * Constructors.
+ *****************************************************************************/
+Instance::Instance( )
+{
+}
+
+Instance::Instance( intf_thread_t *_p_intf )
+{
+ /* Initialization */
+ p_intf = _p_intf;
+}
+
+IMPLEMENT_APP_NO_MAIN(Instance)
+
+/*****************************************************************************
+ * Instance::OnInit: the parent interface execution starts here
+ *****************************************************************************
+ * This is the "main program" equivalent, the program execution will
+ * start here.
+ *****************************************************************************/
+bool Instance::OnInit()
+{
+ wxImage::AddHandler(new wxPNGHandler);
+ //wxImage::AddHandler(new wxXPMHandler);
+
+ /* Make an instance of your derived frame. Passing NULL (the default value
+ * of Frame's constructor is NULL) as the frame doesn't have a frame
+ * since it is the first window */
+ Interface *MainInterface = new Interface( p_intf );
+
+ /* Show the interface */
+ MainInterface->Show(TRUE);
+
+ SetTopWindow(MainInterface);
+
+ /* Start timer */
+ new Timer( p_intf, MainInterface );
+
+ /* Return TRUE to tell program to continue (FALSE would terminate) */
+ return TRUE;
+}
--- /dev/null
+/*****************************************************************************
+ * wxwindows.h: private wxWindows interface description
+ *****************************************************************************
+ * Copyright (C) 1999, 2000 VideoLAN
+ * $Id: wxwindows.h,v 1.1 2002/11/18 13:02:16 gbazin Exp $
+ *
+ * Authors: Gildas Bazin <gbazin@netcourrier.com>
+ *
+ * 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.
+ *****************************************************************************/
+
+/*****************************************************************************
+ * intf_sys_t: description and status of Gtk+ interface
+ *****************************************************************************/
+struct intf_sys_t
+{
+ /* the wx parent window */
+ wxWindow *p_wxwindow;
+
+ /* special actions */
+ vlc_bool_t b_playing;
+ vlc_bool_t b_popup_changed; /* display menu ? */
+ vlc_bool_t b_window_changed; /* window display toggled ? */
+ vlc_bool_t b_playlist_changed; /* playlist display toggled ? */
+ vlc_bool_t b_slider_free; /* slider status */
+
+ /* menus handlers */
+ vlc_bool_t b_program_update; /* do we need to update programs
+ menu */
+ vlc_bool_t b_title_update; /* do we need to update title menus */
+ vlc_bool_t b_chapter_update; /* do we need to update
+ chapter menus */
+ vlc_bool_t b_audio_update; /* do we need to update audio menus */
+ vlc_bool_t b_spu_update; /* do we need to update spu menus */
+
+ /* windows and widgets */
+
+ /* The input thread */
+ input_thread_t * p_input;
+
+ /* The slider */
+ int i_slider_pos; /* slider position */
+ int i_slider_oldpos; /* previous position */
+
+ /* The messages window */
+ msg_subscription_t* p_sub; /* message bank subscription */
+
+ /* Playlist management */
+ int i_playing; /* playlist selected item */
+
+ /* The window labels for DVD mode */
+ int i_part; /* current chapter */
+};
+
+/*****************************************************************************
+ * Prototypes
+ *****************************************************************************/
+
+/*****************************************************************************
+ * Classes declarations.
+ *****************************************************************************/
+class Interface;
+
+/* Timer */
+class Timer: public wxTimer
+{
+public:
+ /* Constructor */
+ Timer( intf_thread_t *p_intf, Interface *p_main_interface );
+ virtual ~Timer();
+
+ virtual void Notify();
+
+private:
+ intf_thread_t *p_intf;
+ Interface *p_main_interface;
+};
+
+/* Main Interface */
+class Interface: public wxFrame
+{
+public:
+ /* Constructor */
+ Interface( intf_thread_t *p_intf );
+ virtual ~Interface();
+ wxSlider *slider;
+ wxStatusBar *statusbar;
+
+private:
+ /* Event handlers (these functions should _not_ be virtual) */
+ void OnExit(wxCommandEvent& event);
+ void OnAbout(wxCommandEvent& event);
+ void OnOpenFile(wxCommandEvent& event);
+ void OnPlayStream(wxCommandEvent& event);
+ void OnStopStream(wxCommandEvent& event);
+ void OnPauseStream(wxCommandEvent& event);
+ void OnSliderUpdate(wxScrollEvent& event);
+ void OnPrevStream( wxCommandEvent& event );
+ void OnNextStream( wxCommandEvent& event );
+
+ DECLARE_EVENT_TABLE();
+
+ Timer *timer;
+ intf_thread_t *p_intf;
+};