+++ /dev/null
-SOURCES_wxwidgets = \
- wxwidgets.cpp \
- wxwidgets.hpp \
- streamdata.h \
- streamdata.cpp \
- interface.cpp \
- extrapanel.cpp \
- menus.cpp \
- timer.cpp \
- video.cpp \
- input_manager.cpp \
- playlist_manager.cpp \
- dialogs.cpp \
- dialogs/open.cpp \
- dialogs/interaction.cpp \
- dialogs/streamout.cpp \
- dialogs/wizard.cpp \
- dialogs/messages.cpp \
- dialogs/playlist.cpp \
- dialogs/iteminfo.cpp \
- dialogs/infopanels.cpp \
- dialogs/preferences.cpp \
- dialogs/preferences_widgets.cpp \
- dialogs/preferences_widgets.h \
- dialogs/fileinfo.cpp \
- dialogs/updatevlc.cpp \
- dialogs/subtitles.cpp \
- dialogs/bookmarks.cpp \
- dialogs/vlm/vlm_slider_manager.cpp \
- dialogs/vlm/vlm_slider_manager.hpp \
- dialogs/vlm/vlm_stream.cpp \
- dialogs/vlm/vlm_stream.hpp \
- dialogs/vlm/vlm_wrapper.hpp \
- dialogs/vlm/vlm_wrapper.cpp \
- dialogs/vlm/vlm_streampanel.cpp \
- dialogs/vlm/vlm_streampanel.hpp \
- dialogs/vlm/vlm_panel.cpp \
- dialogs/vlm/vlm_panel.hpp
- $(NULL)
-
-EXTRA_DIST += \
- interface.hpp \
- extrapanel.hpp \
- timer.hpp \
- video.hpp \
- input_manager.hpp \
- playlist_manager.hpp \
- dialogs/fileinfo.hpp \
- dialogs/preferences.hpp \
- dialogs/wizard.hpp \
- dialogs/vlm/vlm_streampanel.hpp \
- dialogs/vlm/vlm_stream.hpp \
- dialogs/vlm/vlm_panel.hpp \
- dialogs/vlm/vlm_slider_manager.hpp \
- dialogs/vlm/vlm_wrapper.hpp \
- dialogs/playlist.hpp \
- dialogs/interaction.hpp \
- dialogs/open.hpp \
- dialogs/messages.hpp \
- dialogs/iteminfo.hpp \
- dialogs/infopanels.hpp \
- dialogs/subtitles.hpp \
- dialogs/streamout.hpp \
- dialogs/updatevlc.hpp \
- dialogs/bookmarks.hpp \
- bitmaps/advanced.xpm \
- bitmaps/audio.xpm \
- bitmaps/codec.xpm \
- bitmaps/eject.xpm \
- bitmaps/fast.xpm \
- bitmaps/intf.xpm \
- bitmaps/loop.xpm \
- bitmaps/next.xpm \
- bitmaps/pause.xpm \
- bitmaps/playlist.xpm \
- bitmaps/playlist_small.xpm \
- bitmaps/play.xpm \
- bitmaps/prev.xpm \
- bitmaps/repeat.xpm \
- bitmaps/shuffle.xpm \
- bitmaps/slow.xpm \
- bitmaps/speaker_mute.xpm \
- bitmaps/speaker.xpm \
- bitmaps/stop.xpm \
- bitmaps/trash.xpm \
- bitmaps/edit.xpm \
- bitmaps/type_afile.xpm \
- bitmaps/type_card.xpm \
- bitmaps/type_cdda.xpm \
- bitmaps/type_directory.xpm \
- bitmaps/type_disc.xpm \
- bitmaps/type_net.xpm \
- bitmaps/type_node.xpm \
- bitmaps/type_playlist.xpm \
- bitmaps/type_unknown.xpm \
- bitmaps/type_vfile.xpm \
- bitmaps/update_ascii.xpm \
- bitmaps/update_binary.xpm \
- bitmaps/update_document.xpm \
- bitmaps/update_info.xpm \
- bitmaps/update_source.xpm \
- bitmaps/video.xpm
+++ /dev/null
-/* XPM */
-static const char * advanced_xpm[] = {
-"16 16 106 2",
-" c None",
-". c #AEAEBE",
-"+ c #D7D7E0",
-"@ c #D5D5DD",
-"# c #C2C2CE",
-"$ c #CECED7",
-"% c #FEFEFE",
-"& c #DCDCE2",
-"* c #9F9FB2",
-"= c #C3C3CE",
-"- c #FBFBFB",
-"; c #D0D0D8",
-"> c #86869E",
-", c #8F8FA4",
-"' c #EBEBEE",
-") c #EEEEF2",
-"! c #9595A9",
-"~ c #A2A2B5",
-"{ c #9A9AAE",
-"] c #CACAD5",
-"^ c #F8F8F9",
-"/ c #F7F7F9",
-"( c #9999AC",
-"_ c #A8A8B8",
-": c #E7E7EB",
-"< c #87879F",
-"[ c #6F6F8B",
-"} c #BFBFCB",
-"| c #F1F1F5",
-"1 c #E9E9EE",
-"2 c #EDEDF2",
-"3 c #DBDBE2",
-"4 c #7C7F9B",
-"5 c #818199",
-"6 c #E2E2E7",
-"7 c #D2D2DC",
-"8 c #BDBDCA",
-"9 c #E3E3E8",
-"0 c #E0E0E6",
-"a c #E0E0E4",
-"b c #E1E1E7",
-"c c #C6C6D1",
-"d c #707599",
-"e c #9B9BAE",
-"f c #DEDEE4",
-"g c #D8D8E1",
-"h c #DADAE2",
-"i c #D8D8E0",
-"j c #BEBECB",
-"k c #B2B6CE",
-"l c #B09E8F",
-"m c #CC8B22",
-"n c #808098",
-"o c #AFAFBF",
-"p c #B9B9C8",
-"q c #B3B3C2",
-"r c #BCBCC9",
-"s c #C3C6DA",
-"t c #BDAA9A",
-"u c #CF8925",
-"v c #E68208",
-"w c #DA9217",
-"x c #49496A",
-"y c #565674",
-"z c #4B4B6D",
-"A c #5D6186",
-"B c #B3A196",
-"C c #CF8B28",
-"D c #E98606",
-"E c #FD8606",
-"F c #F38F0B",
-"G c #D59018",
-"H c #B2721C",
-"I c #F19C0D",
-"J c #FEA310",
-"K c #FEA210",
-"L c #F8A410",
-"M c #D28F19",
-"N c #CF8918",
-"O c #FEBC19",
-"P c #FEBE1B",
-"Q c #FEB518",
-"R c #FEA913",
-"S c #FDA610",
-"T c #CF8717",
-"U c #C98819",
-"V c #FECE20",
-"W c #FEAC13",
-"X c #FE8907",
-"Y c #FE8506",
-"Z c #FC980B",
-"` c #B26E16",
-" . c #C27F18",
-".. c #FEA410",
-"+. c #FE9109",
-"@. c #FE8004",
-"#. c #FE9106",
-"$. c #BD7013",
-"%. c #BB650F",
-"&. c #FE9F0D",
-"*. c #FE9808",
-"=. c #ED8108",
-"-. c #915216",
-";. c #994E10",
-">. c #AB5A0D",
-",. c #894914",
-" . + @ # ",
-" $ % % & * ",
-" = - % ; ",
-"> , ' % ) ! ",
-"~ { ] ^ / ) ( ",
-"_ : < [ } | 1 2 3 4 ",
-"5 6 7 8 9 0 a b c d ",
-" e f b g h i j k l m ",
-" n o p q r s t u v w ",
-" x y z A B C D E F G ",
-" H I J J K L M ",
-" N O P Q R S T ",
-" U V W X Y Z ` ",
-" ...+.@.#.$.",
-" %.&.*.=.-.",
-" ;.>.,. "};
+++ /dev/null
-/* XPM */
-static const char * audio_xpm[] = {
-"16 16 83 1",
-" c None",
-". c #00E000",
-"+ c #00F100",
-"@ c #00F500",
-"# c #00DE00",
-"$ c #00AF00",
-"% c #00AF01",
-"& c #00A402",
-"* c #00A100",
-"= c #00A400",
-"- c #009401",
-"; c #009301",
-"> c #007700",
-", c #007A02",
-"' c #008101",
-") c #00EE00",
-"! c #00F300",
-"~ c #00A701",
-"{ c #009C02",
-"] c #009C00",
-"^ c #007E03",
-"/ c #007401",
-"( c #929292",
-"_ c #9E9E9E",
-": c #A8A8A8",
-"< c #747474",
-"[ c #737373",
-"} c #6C6C6C",
-"| c #666666",
-"1 c #787878",
-"2 c #8F8F8F",
-"3 c #A7A7A7",
-"4 c #B6B6B7",
-"5 c #6D6D6D",
-"6 c #626262",
-"7 c #646464",
-"8 c #848484",
-"9 c #969696",
-"0 c #B9B9B9",
-"a c #C6C6C6",
-"b c #A6A6AA",
-"c c #6A6A6A",
-"d c #7A7A7A",
-"e c #B2B2B2",
-"f c #BFBFBF",
-"g c #BABABA",
-"h c #B6B6B6",
-"i c #B4B4B4",
-"j c #D7D7D7",
-"k c #C3C3C4",
-"l c #6B6B6B",
-"m c #636363",
-"n c #606060",
-"o c #575757",
-"p c #555555",
-"q c #535353",
-"r c #888888",
-"s c #D3D3D3",
-"t c #E1E1E1",
-"u c #B3B3B4",
-"v c #383838",
-"w c #707070",
-"x c #585858",
-"y c #3C3C3C",
-"z c #3B3B3B",
-"A c #494949",
-"B c #DEDEDE",
-"C c #C4C4C4",
-"D c #57575D",
-"E c #242424",
-"F c #7C7C7C",
-"G c #949494",
-"H c #A2A2A2",
-"I c #BCBCBC",
-"J c #8B8B8D",
-"K c #444444",
-"L c #414141",
-"M c #464646",
-"N c #5D5D5D",
-"O c #7B7B7B",
-"P c #4A4A4F",
-"Q c #4A4A4B",
-"R c #515153",
-" .+@# ",
-" $%& *=- ",
-" ; >, ",
-" ' ",
-" )! ",
-" ~{ ]- ",
-" ^ / ",
-" (_: ",
-" <[}||1234 ",
-" 5|667<89:0ab ",
-" c66defghiajk ",
-" l6mnopqmrstu ",
-" vwcxyvzA3BCD ",
-" EoF2GHIhJ ",
-" KLMNOP ",
-" QR "};
+++ /dev/null
-/* XPM */
-static const char * codec_xpm[] = {
-"16 16 132 2",
-" c None",
-". c #131313",
-"+ c #464646",
-"@ c #E0E0E0",
-"# c #656565",
-"$ c #3D3D3D",
-"% c #E4E9EC",
-"& c #FBFFFF",
-"* c #E8E9EB",
-"= c #595858",
-"- c #393A3B",
-"; c #D1DBE6",
-"> c #ECF8FF",
-", c #E8F4FF",
-"' c #D5DAE1",
-") c #C1C1C1",
-"! c #4F4E4D",
-"~ c #0A0A0A",
-"{ c #909295",
-"] c #D8EAFD",
-"^ c #DFF1FF",
-"/ c #C0CAD6",
-"( c #C6CCD4",
-"_ c #E5ECF1",
-": c #828385",
-"< c #080808",
-"[ c #989898",
-"} c #5B5B5B",
-"| c #2F2E2D",
-"1 c #898E94",
-"2 c #ADB8C6",
-"3 c #B6BDC7",
-"4 c #E6F1FD",
-"5 c #F6FFFF",
-"6 c #8D96A2",
-"7 c #121213",
-"8 c #646464",
-"9 c #B6B6B6",
-"0 c #898989",
-"a c #767676",
-"b c #3F3F3F",
-"c c #292827",
-"d c #6D6E6F",
-"e c #D4E0F0",
-"f c #F1FFFF",
-"g c #B9C4D0",
-"h c #868E98",
-"i c #B0BBC6",
-"j c #46484B",
-"k c #1E1E1D",
-"l c #C7C7C7",
-"m c #8D8D8D",
-"n c #818181",
-"o c #A1A1A1",
-"p c #5E5E5E",
-"q c #343433",
-"r c #777A7F",
-"s c #B3BDC6",
-"t c #959AA2",
-"u c #DEE9F2",
-"v c #F7FFFF",
-"w c #B8C2CE",
-"x c #363636",
-"y c #030303",
-"z c #8F8F8F",
-"A c #BDBDBD",
-"B c #999999",
-"C c #AAAAAA",
-"D c #E1E1E1",
-"E c #F6F6F6",
-"F c #EBEBEB",
-"G c #7E7E7E",
-"H c #3F3E3E",
-"I c #6E6F6F",
-"J c #D9DFE7",
-"K c #FDFFFF",
-"L c #EDF4F9",
-"M c #7A7D81",
-"N c #0C0B0B",
-"O c #A7A7A7",
-"P c #C4C4C4",
-"Q c #B5B5B5",
-"R c #C2C2C2",
-"S c #D6D6D6",
-"T c #D5D5D5",
-"U c #CDCDCD",
-"V c #C5C5C5",
-"W c #727272",
-"X c #5D5C5C",
-"Y c #AEAFB0",
-"Z c #F0F1F1",
-"` c #929394",
-" . c #0B0B0A",
-".. c #868686",
-"+. c #D9D9D9",
-"@. c #D3D3D3",
-"#. c #B8B8B8",
-"$. c #9B9B9B",
-"%. c #969696",
-"&. c #A0A0A0",
-"*. c #D1D1D1",
-"=. c #919192",
-"-. c #111111",
-";. c #3E3E3E",
-">. c #BEBEBE",
-",. c #EFEFEF",
-"'. c #E7E7E7",
-"). c #B0B0B0",
-"!. c #CFCFCF",
-"~. c #F4F4F4",
-"{. c #DFDFDF",
-"]. c #5D5D5D",
-"^. c #0C0C0C",
-"/. c #585858",
-"(. c #FFFFFF",
-"_. c #FDFDFD",
-":. c #FBFBFB",
-"<. c #8E8E8E",
-"[. c #252525",
-"}. c #424242",
-"|. c #7F7F7F",
-"1. c #A8A8A8",
-"2. c #939393",
-"3. c #6D6D6D",
-"4. c #191919",
-"5. c #4C4C4C",
-"6. c #6B6B6B",
-"7. c #8B8B8B",
-"8. c #ADADAD",
-"9. c #B4B4B4",
-"0. c #333333",
-"a. c #6C6C6C",
-" . ",
-" + @ # ",
-" $ % & * = ",
-" - ; > , ' ) ! ",
-" ~ { ] ^ / ( _ : < ",
-" [ } | 1 2 3 4 5 6 7 . ",
-" 8 9 0 a b c d e f g h i j k ",
-" l m n m o p q r s t u v w x y ",
-"z A B C D E F G H I J K L M N ",
-"O P Q R S T U V W X Y Z ` . ",
-"..+.@.#.[ $.%.&.*...G =.-. ",
-";.>.,.'.).z B !.~.{.].^. ",
-" /.9 ,.(._.(.:.T <.[. ",
-" }.|.$.1.&.2.3.4. ",
-" 5.6.7.8.9.$ ",
-" 0.# a. "};
+++ /dev/null
-/* XPM */
-static const char * edit_xpm[] = {
-"16 16 44 1",
-" g None",
-". g #999999",
-"+ g #E9E9E9",
-"@ g #898989",
-"# g #B6B6B6",
-"$ g #606060",
-"% g #EBEBEB",
-"& g #BCBCBC",
-"* g #B8B8B8",
-"= g #E7E7E7",
-"- g #B1B1B1",
-"; g #FFFFFF",
-"> g #ECECEC",
-", g #D3D3D3",
-"' g #E8E8E8",
-") g #B0B0B0",
-"! g #878787",
-"~ g #DBDBDB",
-"{ g #CCCCCC",
-"] g #B7B7B7",
-"^ g #8A8A8A",
-"/ g #AEAEAE",
-"( g #E4E4E4",
-"_ g #ABABAB",
-": g #A5A5A5",
-"< g #717171",
-"[ g #CBCBCB",
-"} g #757575",
-"| g #5E5E5E",
-"1 g #8F8F8F",
-"2 g #868686",
-"3 g #424242",
-"4 g #595959",
-"5 g #9D9D9D",
-"6 g #D6D6D6",
-"7 g #C4C4C4",
-"8 g #000000",
-"9 g #636363",
-"0 g #8C8C8C",
-"a g #CACACA",
-"b g #DADADA",
-"c g #B2B2B2",
-"d g #EAEAEA",
-"e g #EEEEEE",
-" ",
-" . . . . . ",
-" .+.+.+.+.+. ",
-" @.#.#.#.#.#.$$ ",
-" @%.&.*.*.*.$=-$",
-" @;>>>>>>>,$')!$",
-" @;~{{{{{]$')^$ ",
-" @;>>>>>,$=/!$ ",
-" @;~{{{]$(_!$@ ",
-" @;>>>%$(:^$<@ ",
-" @;~{[}|/@$12@ ",
-" @;>>+$34$56/@ ",
-" @;~[78$90abc@ ",
-" @;>%dd+%d%>c@ ",
-" @eccccccc-cc@ ",
-" @@@@@@@@@@@@@ "};
+++ /dev/null
-/* XPM */
-static const char * eject_xpm[] = {
-"16 16 17 1",
-"* c None",
-". c #000000",
-"+ c #800000",
-"@ c #008000",
-"# c #808000",
-"$ c #000080",
-"% c #800080",
-"& c #008080",
-" c #C0C0C0",
-"= c #808080",
-"- c #FF0000",
-"; c #00FF00",
-"> c #FFFF00",
-", c #0000FF",
-"' c #FF00FF",
-") c #00FFFF",
-"! c #FFFFFF",
-"****************",
-"****************",
-"****************",
-"*******.********",
-"******...*******",
-"*****.....******",
-"****.......*****",
-"****.......*****",
-"****************",
-"****************",
-"****.......*****",
-"****.......*****",
-"****************",
-"****************",
-"****************",
-"****************"};
+++ /dev/null
-/* XPM */
-static const char * fast_xpm[] = {
-"16 16 17 1",
-"* c None",
-". c #000000",
-"+ c #800000",
-"@ c #008000",
-"# c #808000",
-"$ c #000080",
-"% c #800080",
-"& c #008080",
-" c #C0C0C0",
-"= c #808080",
-"- c #FF0000",
-"; c #00FF00",
-"> c #FFFF00",
-", c #0000FF",
-"' c #FF00FF",
-") c #00FFFF",
-"! c #FFFFFF",
-"****************",
-"****************",
-"****************",
-"****************",
-"****.****.******",
-"****..***..*****",
-"****...**...****",
-"****....*....***",
-"****...**...****",
-"****..***..*****",
-"****.****.******",
-"****************",
-"****************",
-"****************",
-"****************",
-"****************"};
+++ /dev/null
-/* XPM */
-static const char * intf_xpm[] = {
-"16 16 216 2",
-" c None",
-". c #715F39",
-"+ c #DDA434",
-"@ c #CD8A01",
-"# c #CC8A04",
-"$ c #B79042",
-"% c #D49411",
-"& c #D18D03",
-"* c #B27D11",
-"= c #ECECEC",
-"- c #FFFDFA",
-"; c #FEFBF8",
-"> c #FDFAF7",
-", c #FCFAF7",
-"' c #FCF9F6",
-") c #FBF8F6",
-"! c #F8F8FA",
-"~ c #BAAB8C",
-"{ c #D09824",
-"] c #CD8B02",
-"^ c #C88600",
-"/ c #987D48",
-"( c #CFD1D6",
-"_ c #B0B0AF",
-": c #FCFCFD",
-"< c #BAC7DC",
-"[ c #C0D1E6",
-"} c #C5D6E8",
-"| c #C9DAEB",
-"1 c #CDDEED",
-"2 c #CFE3F3",
-"3 c #C0CCD7",
-"4 c #BE9648",
-"5 c #D3910C",
-"6 c #CD8B03",
-"7 c #A06E0A",
-"8 c #868A90",
-"9 c #FFFFFF",
-"0 c #797979",
-"a c #B4B4B2",
-"b c #E9ECF2",
-"c c #2962B7",
-"d c #3C7ED0",
-"e c #4D8ED9",
-"f c #5B9DE2",
-"g c #66A9EA",
-"h c #64A8ED",
-"i c #868978",
-"j c #D4961A",
-"k c #CD8A02",
-"l c #C08205",
-"m c #5D5844",
-"n c #4977C2",
-"o c #7B7B7A",
-"p c #B5B4B1",
-"q c #ECEFF5",
-"r c #3670C4",
-"s c #3A7DD1",
-"t c #4A8DDA",
-"u c #5397E1",
-"v c #60A5EC",
-"w c #92ABC7",
-"x c #A88A4F",
-"y c #CF8E09",
-"z c #C88602",
-"A c #8E691F",
-"B c #295A9D",
-"C c #5287D4",
-"D c #F4F5F7",
-"E c #797978",
-"F c #B6B6B5",
-"G c #EDF0F5",
-"H c #2E68BD",
-"I c #3577CE",
-"J c #3F81D4",
-"K c #619BDE",
-"L c #639CDB",
-"M c #91A0B1",
-"N c #CFCDCB",
-"O c #A4916A",
-"P c #9F7012",
-"Q c #455C77",
-"R c #2268CA",
-"S c #4D7FCA",
-"T c #E9E9EB",
-"U c #787676",
-"V c #BAB9B6",
-"W c #EEF1F7",
-"X c #1850AF",
-"Y c #2363C2",
-"Z c #3878CE",
-"` c #4B8DDA",
-" . c #638DBE",
-".. c #C2C3C3",
-"+. c #C6C5C5",
-"@. c #8E8D8E",
-"#. c #4E6277",
-"$. c #2E6DC3",
-"%. c #1A5DC0",
-"&. c #3E6EBF",
-"*. c #E7E8E9",
-"=. c #797876",
-"-. c #BBBBB9",
-";. c #F0F3F9",
-">. c #1048AA",
-",. c #033FAB",
-"'. c #2465C3",
-"). c #4F96E0",
-"!. c #97A9BD",
-"~. c #CFCBC6",
-"{. c #949290",
-"]. c #6B7E8C",
-"^. c #6EA5D8",
-"/. c #2766C3",
-"(. c #023CAA",
-"_. c #3766BA",
-":. c #E5E6E7",
-"<. c #797976",
-"[. c #BDBBBA",
-"}. c #F1F4FA",
-"|. c #164EAF",
-"1. c #0948B1",
-"2. c #114FB2",
-"3. c #365885",
-"4. c #767472",
-"5. c #949495",
-"6. c #566E8D",
-"7. c #7DB0DB",
-"8. c #70AAE6",
-"9. c #0D4BB2",
-"0. c #0039A8",
-"a. c #3868BA",
-"b. c #E3E4E5",
-"c. c #BEBDBB",
-"d. c #F2F5FC",
-"e. c #215AB6",
-"f. c #1459C1",
-"g. c #21477E",
-"h. c #95918B",
-"i. c #17130F",
-"j. c #536774",
-"k. c #7FB4E5",
-"l. c #76B1E9",
-"m. c #2F6DC5",
-"n. c #1957BA",
-"o. c #0747B1",
-"p. c #3C6CBD",
-"q. c #E0E0E2",
-"r. c #BFBEBD",
-"s. c #F3F6FC",
-"t. c #2965BF",
-"u. c #1D5CB8",
-"v. c #344256",
-"w. c #3A352F",
-"x. c #020407",
-"y. c #789DBB",
-"z. c #5694E0",
-"A. c #397ACE",
-"B. c #3070C9",
-"C. c #2564C2",
-"D. c #1152B8",
-"E. c #4272C2",
-"F. c #DDDDDF",
-"G. c #C0BFBE",
-"H. c #F1F4FB",
-"I. c #346EC2",
-"J. c #4067A3",
-"K. c #29364B",
-"L. c #09182B",
-"M. c #336298",
-"N. c #4F93E1",
-"O. c #498DDC",
-"P. c #4386D8",
-"Q. c #3B7DD3",
-"R. c #2F71CB",
-"S. c #195CC0",
-"T. c #4879C8",
-"U. c #D9DADB",
-"V. c #C2C1C1",
-"W. c #FBFCFE",
-"X. c #BAC9E2",
-"Y. c #BFCADD",
-"Z. c #AFBBCB",
-"`. c #B2C6DE",
-" + c #BAD4F1",
-".+ c #B7CFE9",
-"++ c #B4CCE7",
-"@+ c #B0C8E3",
-"#+ c #ABC2DF",
-"$+ c #A4BBDA",
-"%+ c #9BB2D5",
-"&+ c #A8B9D5",
-"*+ c #D7D7D7",
-"=+ c #7B7B7B",
-"-+ c #848484",
-";+ c #FFFFFE",
-">+ c #FDFBF9",
-",+ c #F8F6F3",
-"'+ c #F3F0EC",
-")+ c #EFEBE7",
-"!+ c #EBE7E3",
-"~+ c #E8E5E0",
-"{+ c #E4E1DD",
-"]+ c #E1DED9",
-"^+ c #DEDBD6",
-"/+ c #D8D6D2",
-"(+ c #D3D3D3",
-"_+ c #535353",
-":+ c #4F4F4F",
-"<+ c #5B5B5B",
-"[+ c #5A5A5A",
-"}+ c #595959",
-"|+ c #575757",
-"1+ c #555555",
-"2+ c #545454",
-"3+ c #414141",
-" . + @ # ",
-" $ % & * ",
-" = - ; > , ' ) ! ~ { ] ^ / ( ",
-"_ : < [ } | 1 2 3 4 5 6 7 8 9 0 ",
-"a b c d e f g h i j k l m n 9 o ",
-"p q r s t u v w x y z A B C D E ",
-"F G H I J K L M N O P Q R S T U ",
-"V W X Y Z ` ...+.@.#.$.%.&.*.=.",
-"-.;.>.,.'.).!.~.{.].^./.(._.:.<.",
-"[.}.|.1.2.3.4.5.6.7.8.9.0.a.b.E ",
-"c.d.e.f.g.h.i.j.k.l.m.n.o.p.q.E ",
-"r.s.t.u.v.w.x.y.z.A.B.C.D.E.F.E ",
-"G.H.I.J.K.L.M.N.O.P.Q.R.S.T.U.E ",
-"V.W.X.Y.Z.`. +.+++@+#+$+%+&+*+=+",
-"-+9 ;+- >+,+'+)+!+~+{+]+^+/+(+_+",
-" :+<+[+}+}+|+|+|+1+1+1+_+2+3+ "};
+++ /dev/null
-/* XPM */
-static const char * loop_xpm[] = {
-"16 16 2 1",
-" c None",
-". c #000000",
-" ",
-" ",
-" ........... ",
-" . . ",
-" . . ",
-" . . ",
-" . . ",
-" . . . . ",
-" ... . ",
-" . . ",
-" ",
-" ... ... ... ",
-" ... ... ... ",
-" ... ... ... ",
-" ",
-" "};
+++ /dev/null
-/* XPM */
-static const char * next_xpm[] = {
-"16 16 17 1",
-"* c None",
-". c #000000",
-"+ c #800000",
-"@ c #008000",
-"# c #808000",
-"$ c #000080",
-"% c #800080",
-"& c #008080",
-" c #C0C0C0",
-"= c #808080",
-"- c #FF0000",
-"; c #00FF00",
-"> c #FFFF00",
-", c #0000FF",
-"' c #FF00FF",
-") c #00FFFF",
-"! c #FFFFFF",
-"****************",
-"****************",
-"****************",
-"****************",
-"**.****.****.***",
-"**..***..***.***",
-"**...**...**.***",
-"**....*....*.***",
-"**...**...**.***",
-"**..***..***.***",
-"**.****.****.***",
-"****************",
-"****************",
-"****************",
-"****************",
-"****************"};
+++ /dev/null
-/* XPM */
-static const char * pause_xpm[] = {
-"16 16 17 1",
-"* c None",
-". c #000000",
-"+ c #800000",
-"@ c #008000",
-"# c #808000",
-"$ c #000080",
-"% c #800080",
-"& c #008080",
-" c #C0C0C0",
-"= c #808080",
-"- c #FF0000",
-"; c #00FF00",
-"> c #FFFF00",
-", c #0000FF",
-"' c #FF00FF",
-") c #00FFFF",
-"! c #FFFFFF",
-"****************",
-"****************",
-"****************",
-"****...**...****",
-"****...**...****",
-"****...**...****",
-"****...**...****",
-"****...**...****",
-"****...**...****",
-"****...**...****",
-"****...**...****",
-"****...**...****",
-"****************",
-"****************",
-"****************",
-"****************"};
+++ /dev/null
-/* XPM */
-static const char * play_xpm[] = {
-"16 16 17 1",
-"* c None",
-". c #000000",
-"+ c #800000",
-"@ c #008000",
-"# c #808000",
-"$ c #000080",
-"% c #800080",
-"& c #008080",
-" c #C0C0C0",
-"= c #808080",
-"- c #FF0000",
-"; c #00FF00",
-"> c #FFFF00",
-", c #0000FF",
-"' c #FF00FF",
-") c #00FFFF",
-"! c #FFFFFF",
-"****************",
-"****************",
-"***..***********",
-"***....*********",
-"***......*******",
-"***........*****",
-"***..........***",
-"***...........**",
-"***..........***",
-"***........*****",
-"***......*******",
-"***....*********",
-"***..***********",
-"****************",
-"****************",
-"****************"};
+++ /dev/null
-/* XPM */
-static const char * playlist_xpm[] = {
-"16 16 17 1",
-"* c None",
-". c #000000",
-"+ c #800000",
-"@ c #008000",
-"# c #808000",
-"$ c #000080",
-"% c #800080",
-"& c #008080",
-" c #C0C0C0",
-"= c #808080",
-"- c #FF0000",
-"; c #00FF00",
-"> c #FFFF00",
-", c #0000FF",
-"' c #FF00FF",
-") c #00FFFF",
-"! c #FFFFFF",
-"****************",
-"****************",
-"****************",
-"**..**........**",
-"**..**........**",
-"****************",
-"****************",
-"**..**........**",
-"**..**........**",
-"****************",
-"****************",
-"**..**........**",
-"**..**........**",
-"****************",
-"****************",
-"****************"};
+++ /dev/null
-/* XPM */
-static const char * playlist_small_xpm[] = {
-"16 16 2 1",
-" c None",
-". c #000000",
-" ",
-" ",
-" ",
-" ",
-" ",
-" ",
-" .. ....... ",
-" ",
-" .. ....... ",
-" ",
-" .. ....... ",
-" ",
-" .. ....... ",
-" ",
-" ",
-" "};
+++ /dev/null
-/* XPM */
-static const char * prev_xpm[] = {
-"16 16 17 1",
-"* c None",
-". c #000000",
-"+ c #800000",
-"@ c #008000",
-"# c #808000",
-"$ c #000080",
-"% c #800080",
-"& c #008080",
-" c #C0C0C0",
-"= c #808080",
-"- c #FF0000",
-"; c #00FF00",
-"> c #FFFF00",
-", c #0000FF",
-"' c #FF00FF",
-") c #00FFFF",
-"! c #FFFFFF",
-"****************",
-"****************",
-"****************",
-"****************",
-"**.****.****.***",
-"**.***..***..***",
-"**.**...**...***",
-"**.*....*....***",
-"**.**...**...***",
-"**.***..***..***",
-"**.****.****.***",
-"****************",
-"****************",
-"****************",
-"****************",
-"****************"};
+++ /dev/null
-/* XPM */
-static const char * repeat_xpm[] = {
-"16 16 2 1",
-" c None",
-". c #000000",
-" ",
-" ",
-" ........... ",
-" . . ",
-" . . ",
-" . . ",
-" . . ",
-" . . . . ",
-" ... . ",
-" . . ",
-" . ",
-" ... . ",
-" ... ........ ",
-" ... ",
-" ",
-" "};
+++ /dev/null
-/* XPM */
-static const char * shuffle_on_xpm[] = {
-"16 16 2 1",
-" c None",
-". c #000000",
-" ",
-" . ",
-" . ",
-" ............ ",
-" . ",
-" . ",
-" ",
-" ",
-" ",
-" ...... . ",
-" . . ... ",
-" . . . . . ",
-" . . . ",
-" . . . ",
-" . ...... ",
-" "};
+++ /dev/null
-/* XPM */
-static const char * slow_xpm[] = {
-"16 16 17 1",
-"* c None",
-". c #000000",
-"+ c #800000",
-"@ c #008000",
-"# c #808000",
-"$ c #000080",
-"% c #800080",
-"& c #008080",
-" c #C0C0C0",
-"= c #808080",
-"- c #FF0000",
-"; c #00FF00",
-"> c #FFFF00",
-", c #0000FF",
-"' c #FF00FF",
-") c #00FFFF",
-"! c #FFFFFF",
-"****************",
-"****************",
-"****************",
-"****************",
-"******.****.****",
-"*****..***..****",
-"****...**...****",
-"***....*....****",
-"****...**...****",
-"*****..***..****",
-"******.****.****",
-"****************",
-"****************",
-"****************",
-"****************",
-"****************"};
+++ /dev/null
-/* XPM */
-static const char * speaker_xpm[] = {
-"16 16 17 1",
-"* c None",
-". c #000000",
-"+ c #800000",
-"@ c #008000",
-"# c #808000",
-"$ c #000080",
-"% c #800080",
-"& c #008080",
-" c #C0C0C0",
-"= c #808080",
-"- c #FF0000",
-"; c #00FF00",
-"> c #FFFF00",
-", c #0000FF",
-"' c #FF00FF",
-") c #00FFFF",
-"! c #FFFFFF",
-"*********..*****",
-"********#=.=****",
-"*******#>.******",
-"******#>==*!=***",
-"*****#>!.*!!=***",
-"***##>!>.*!!=***",
-"**#!*!>!..!!=***",
-"**#>*>!>.*.!=***",
-"**#>*!>!.==!=***",
-"**.#=>!>..!!=***",
-"***..#>!.*!!=***",
-"*****.#>.*!!=***",
-"******.#==!!=***",
-"*******.#.!=****",
-"********.#.=****",
-"*********..*****"};
+++ /dev/null
-/* XPM */
-static const char * speaker_mute_xpm[] = {
-"16 16 50 1",
-" c None",
-". c #000000",
-"+ c #FF0000",
-"@ c #FB0400",
-"# c #E81717",
-"$ c #880000",
-"% c #8D7272",
-"& c #966900",
-"* c #FFF700",
-"= c #837B7B",
-"- c #966969",
-"; c #FF1B1B",
-"> c #DA2400",
-", c #FFFF00",
-"' c #FFFFFF",
-") c #FFF3F3",
-"! c #D22D2D",
-"~ c #808000",
-"{ c #B64800",
-"] c #FF2424",
-"^ c #FFDF00",
-"/ c #808080",
-"( c #A55900",
-"_ c #FF9797",
-": c #FF0300",
-"< c #FF3939",
-"[ c #230000",
-"} c #867800",
-"| c #FF9999",
-"1 c #FF0900",
-"2 c #DD0000",
-"3 c #FF9292",
-"4 c #D82727",
-"5 c #807E7E",
-"6 c #4C0000",
-"7 c #650000",
-"8 c #DB0000",
-"9 c #FF6D6D",
-"0 c #FF5454",
-"a c #FF6565",
-"b c #817D7D",
-"c c #FFFBFB",
-"d c #FF7474",
-"e c #E11D1D",
-"f c #2D0000",
-"g c #837B00",
-"h c #FF8A8A",
-"i c #FA0404",
-"j c #F70000",
-"k c #E81700",
-" .. ",
-" +++@#$% ",
-" ++++++++ ",
-" +++&*=- ;+ ",
-" +++>,'. ')!+ ",
-" ++~{+]^. ''/++ ",
-" +(' _:<[.''/ + ",
-" +}, ,|12 .'/ + ",
-" +}, ',3+45'/ + ",
-" +6~/,',789'/ + ",
-" ++..~,'. 0ab++ ",
-" ++ .~,. cde+ ",
-" ++ fg=-h;+ ",
-" +++++++i ",
-" +++jk$% ",
-" .. "};
+++ /dev/null
-/* XPM */
-static const char * stop_xpm[] = {
-"16 16 17 1",
-"* c None",
-". c #000000",
-"+ c #800000",
-"@ c #008000",
-"# c #808000",
-"$ c #000080",
-"% c #800080",
-"& c #008080",
-" c #C0C0C0",
-"= c #808080",
-"- c #FF0000",
-"; c #00FF00",
-"> c #FFFF00",
-", c #0000FF",
-"' c #FF00FF",
-") c #00FFFF",
-"! c #FFFFFF",
-"****************",
-"****************",
-"****************",
-"****........****",
-"****........****",
-"****........****",
-"****........****",
-"****........****",
-"****........****",
-"****........****",
-"****........****",
-"****........****",
-"****************",
-"****************",
-"****************",
-"****************"};
+++ /dev/null
-/* XPM */
-static const char * trash_xpm[] = {
-"16 16 88 1",
-" c None",
-". c #2C2C2C",
-"+ c #6E6E6E",
-"@ c #555555",
-"# c #161616",
-"$ c #626154",
-"% c #6B6A5A",
-"& c #A1A095",
-"* c #9B9B98",
-"= c #A4A49D",
-"- c #A5A495",
-"; c #5C5C50",
-"> c #575649",
-", c #616057",
-"' c #D0CEBA",
-") c #CCCBBD",
-"! c #85847F",
-"~ c #4C4C48",
-"{ c #3D3C34",
-"] c #7E7C6B",
-"^ c #B2B09E",
-"/ c #B2B097",
-"( c #4D4C41",
-"_ c #616059",
-": c #E0E0DB",
-"< c #EBEBE4",
-"[ c #D8D7CD",
-"} c #CCCBBC",
-"| c #C0BEA8",
-"1 c #B8B69D",
-"2 c #C5C4AF",
-"3 c #AAA996",
-"4 c #414037",
-"5 c #4D4D42",
-"6 c #AAA99B",
-"7 c #D6D5CE",
-"8 c #EAE9E5",
-"9 c #E2E1DE",
-"0 c #D8D8CF",
-"a c #BCBBAE",
-"b c #9C9A89",
-"c c #737262",
-"d c #34332D",
-"e c #000000",
-"f c #41413C",
-"g c #888882",
-"h c #B3B2A8",
-"i c #BCBCAE",
-"j c #A3A18A",
-"k c #8F8D7A",
-"l c #606056",
-"m c #353530",
-"n c #676758",
-"o c #59594F",
-"p c #52524D",
-"q c #3D3D38",
-"r c #2A2A23",
-"s c #2E2E26",
-"t c #35352C",
-"u c #3D3D32",
-"v c #707060",
-"w c #919184",
-"x c #A0A098",
-"y c #707066",
-"z c #646458",
-"A c #606051",
-"B c #4D4D40",
-"C c #4E4E40",
-"D c #959587",
-"E c #B9B9AC",
-"F c #8E8E80",
-"G c #787868",
-"H c #7A7A67",
-"I c #565648",
-"J c #6E6E5D",
-"K c #939385",
-"L c #545445",
-"M c #46463C",
-"N c #868678",
-"O c #B2B2A5",
-"P c #8F8F82",
-"Q c #787865",
-"R c #515143",
-"S c #39392F",
-"T c #2F2F29",
-"U c #30302A",
-"V c #2C2C25",
-"W c #272720",
-" ",
-" ",
-" .+@# ",
-" $%&*=-;> ",
-" ,')!~{]^/( ",
-" _:<[}|1234 ",
-" 567890abcd ",
-" efghijklme ",
-" enopqrstue ",
-" evwxyzABCe ",
-" evDEFGHIIe ",
-" eJKEFGHILe ",
-" eMNOPGQRSe ",
-" eTUVWe ",
-" ",
-" "};
+++ /dev/null
-/* XPM */
-static const char * type_afile_xpm[] = {
-"16 16 107 2",
-" c None",
-". c #8F8F8F",
-"+ c #FFFFFF",
-"@ c #B7CFF9",
-"# c #B8CFF8",
-"$ c #BCD2F7",
-"% c #AFCAF4",
-"& c #93B7EE",
-"* c #5B91E2",
-"= c #4E88DE",
-"- c #4481D9",
-"; c #3A7AD6",
-"> c #2F73D2",
-", c #246CCD",
-"' c #1663CA",
-") c #F3F7FE",
-"! c #F1F6FD",
-"~ c #EFF5FD",
-"{ c #F2F7FF",
-"] c #F2F8FF",
-"^ c #E8EFFB",
-"/ c #E6EDF9",
-"( c #E7EFFB",
-"_ c #E2EAF7",
-": c #DCE5F1",
-"< c #D9E2EF",
-"[ c #D6E1EE",
-"} c #FFFFFE",
-"| c #EFEEED",
-"1 c #D5D5D3",
-"2 c #CDCBC9",
-"3 c #CCCBC9",
-"4 c #D4D2D0",
-"5 c #EAE8E5",
-"6 c #FCFBF8",
-"7 c #FBFAF7",
-"8 c #F9F7F4",
-"9 c #FAFAFA",
-"0 c #CFCFCF",
-"a c #A7A7A7",
-"b c #818181",
-"c c #696969",
-"d c #686868",
-"e c #808080",
-"f c #A5A5A5",
-"g c #C6C6C6",
-"h c #EFEFEF",
-"i c #F3F3F3",
-"j c #D2D2D2",
-"k c #B0B0B0",
-"l c #858585",
-"m c #828282",
-"n c #989898",
-"o c #999999",
-"p c #838383",
-"q c #848484",
-"r c #AEAEAE",
-"s c #CACACA",
-"t c #F0F0F0",
-"u c #F6F6F6",
-"v c #BDBDBD",
-"w c #9F9F9F",
-"x c #E8E8E8",
-"y c #C3C3C3",
-"z c #A1A1A1",
-"A c #ACACAC",
-"B c #BBBBBB",
-"C c #E4E4E4",
-"D c #F4F4F4",
-"E c #C9C9C9",
-"F c #C2C2C2",
-"G c #B8B8B8",
-"H c #B9B9B9",
-"I c #B5B5B5",
-"J c #C1C1C1",
-"K c #B1B1B1",
-"L c #E5E5E5",
-"M c #FEFEFE",
-"N c #ABABAB",
-"O c #EBEBEB",
-"P c #C0C0C0",
-"Q c #8B8B8B",
-"R c #BABABA",
-"S c #A6A6A6",
-"T c #F1F1F1",
-"U c #F9F9F9",
-"V c #DEDEDE",
-"W c #F2F2F2",
-"X c #909090",
-"Y c #D8D8D8",
-"Z c #F5F5F5",
-"` c #FCFCFC",
-" . c #DCDCDC",
-".. c #777777",
-"+. c #6D6D6D",
-"@. c #979797",
-"#. c #8C8C8C",
-"$. c #F7F7F7",
-"%. c #F8F8F8",
-"&. c #CECECE",
-"*. c #868686",
-"=. c #B2B2B2",
-"-. c #A8A8A8",
-";. c #EAEAEA",
-">. c #FBFBFB",
-",. c #FDFDFD",
-"'. c #EEEEEE",
-". . . . . . . . . . . . . . . . ",
-". + @ # $ % & * = - ; > , ' + . ",
-". + ) ! ~ { ] ^ / ( _ : < [ + . ",
-". + + + } | 1 2 3 4 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 r w s t x y z A B C + . ",
-". + D k E F G H I r J s K L + . ",
-". + M N J O P . Q R O E S T + . ",
-". + U V . v W W t h J X Y 9 + . ",
-". + Z ` ...+.. @.#.q s D h + . ",
-". + $.%.$.&.*.l =.v g -.-.-.-.. ",
-". + U U U U h C C ;.;.-.+ + . ",
-". + >.>.>.>.M M ,.+ '.-.+ . ",
-". + + + + + + + + + U -.. ",
-". . . . . . . . . . . . "};
+++ /dev/null
-/* XPM */
-static const char * type_card_xpm[] = {
-"16 16 174 2",
-" c #FFFFFF",
-". c #E7E7E7",
-"+ c #888888",
-"@ c #696969",
-"# c #B1B1B1",
-"$ c #D4D4D4",
-"% c #5D5D5D",
-"& c #AFAFAF",
-"* c #DCDCDC",
-"= c #5E5E5E",
-"- c #ECECEC",
-"; c #FCFCFC",
-"> c #D9D9D9",
-", c #D3D3D3",
-"' c #D2D2D2",
-") c #CFCFCF",
-"! c #7D7D7D",
-"~ c #B2B6B1",
-"{ c #72896A",
-"] c #6D7E60",
-"^ c #6E7E5F",
-"/ c #6C7B5C",
-"( c #6B7A5B",
-"_ c #606C50",
-": c #616C4F",
-"< c #646F53",
-"[ c #5D684C",
-"} c #606A4F",
-"| c #536148",
-"1 c #717370",
-"2 c #989B95",
-"3 c #667B5C",
-"4 c #7F8C7B",
-"5 c #8D978A",
-"6 c #889185",
-"7 c #868F83",
-"8 c #858E81",
-"9 c #677163",
-"0 c #48563D",
-"a c #727C67",
-"b c #495642",
-"c c #697164",
-"d c #48573E",
-"e c #686B67",
-"f c #BFBFBF",
-"g c #FEFEFE",
-"h c #969993",
-"i c #7B8875",
-"j c #A9AAA8",
-"k c #B7B7B7",
-"l c #ADADAD",
-"m c #A8A8A8",
-"n c #A2A2A2",
-"o c #666766",
-"p c #545D4D",
-"q c #8A8D72",
-"r c #52573D",
-"s c #969276",
-"t c #3E4933",
-"u c #6D706C",
-"v c #9F9F9F",
-"w c #7E8C78",
-"x c #929492",
-"y c #959595",
-"z c #818181",
-"A c #7C7C7C",
-"B c #7F7F7F",
-"C c #4E4F4E",
-"D c #495143",
-"E c #857664",
-"F c #4D3C2B",
-"G c #936C5E",
-"H c #393F2C",
-"I c #676A66",
-"J c #9A9A9A",
-"K c #979B94",
-"L c #586B50",
-"M c #4F574C",
-"N c #535851",
-"O c #4F544D",
-"P c #4D514B",
-"Q c #4B4E49",
-"R c #393E37",
-"S c #3B432F",
-"T c #58634F",
-"U c #3D4737",
-"V c #545C4F",
-"W c #37432F",
-"X c #61635F",
-"Y c #A9A9A9",
-"Z c #FDFDFD",
-"` c #979C96",
-" . c #6D8462",
-".. c #536045",
-"+. c #484F39",
-"@. c #414833",
-"#. c #3E4531",
-"$. c #424733",
-"%. c #3E4430",
-"&. c #535B3F",
-"*. c #566445",
-"=. c #566243",
-"-. c #59634A",
-";. c #4E5843",
-">. c #696B67",
-",. c #F6F6F6",
-"'. c #979C95",
-"). c #81916F",
-"!. c #6C7257",
-"~. c #75795F",
-"{. c #676D55",
-"]. c #5E634A",
-"^. c #6B6E53",
-"/. c #566143",
-"(. c #576746",
-"_. c #65734F",
-":. c #69785B",
-"<. c #71736F",
-"[. c #676766",
-"}. c #989796",
-"|. c #7E7E7E",
-"1. c #959A93",
-"2. c #778663",
-"3. c #484834",
-"4. c #53523B",
-"5. c #54553D",
-"6. c #444431",
-"7. c #494733",
-"8. c #576143",
-"9. c #65724E",
-"0. c #62714D",
-"a. c #687859",
-"b. c #5E605C",
-"c. c #4A4A4A",
-"d. c #656565",
-"e. c #8C8C8C",
-"f. c #666666",
-"g. c #AEB1AC",
-"h. c #637A5A",
-"i. c #677352",
-"j. c #5E694A",
-"k. c #5E684A",
-"l. c #5D6748",
-"m. c #5B6647",
-"n. c #626E4C",
-"o. c #677450",
-"p. c #64714D",
-"q. c #445135",
-"r. c #293121",
-"s. c #161B12",
-"t. c #5C5C5C",
-"u. c #DEDEDE",
-"v. c #F8F8F8",
-"w. c #757B73",
-"x. c #A2A175",
-"y. c #9C9A70",
-"z. c #9C9A6F",
-"A. c #9B996E",
-"B. c #9A986D",
-"C. c #98956B",
-"D. c #323A2D",
-"E. c #AAAAAA",
-"F. c #979797",
-"G. c #AFB1AE",
-"H. c #6F6E59",
-"I. c #6C6B56",
-"J. c #6C6A55",
-"K. c #6B6A55",
-"L. c #6A6954",
-"M. c #5B5F58",
-"N. c #EEEEEE",
-"O. c #D7D7D7",
-"P. c #5F5F5F",
-"Q. c #EDEDED",
-" . + @ # ",
-" $ % & * ",
-" $ = - ",
-"; > $ $ $ $ $ , ' $ $ $ ) ! - ",
-"~ { ] ^ / / ( _ : < [ } | 1 - ",
-"2 3 4 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 ; ",
-"h w x y z A B C D E F G H I J ; ",
-"K L M N O P Q R S T U V W X Y Z ",
-"` ...+.@.#.$.%.&.*.=.-.;.>.f ,.",
-"'.).!.~.{.].^./.(._.:.<.% [.}.|.",
-"1.2.3.4.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.x.y.z.A.B.B.B.C.D.E.F.= - ",
-" G.H.I.I.I.J.K.K.L.M.N.O.P.Q. ",
-" "};
+++ /dev/null
-/* XPM */
-static const char * type_cdda_xpm[] = {
-"16 16 119 2",
-" c None",
-". c #7E7E7E",
-"+ c #A3A3A3",
-"@ c #000000",
-"# c #030303",
-"$ c #BDCCFF",
-"% c #C1CDF5",
-"& c #D8DDF1",
-"* c #C4CBE9",
-"= c #C0C8F0",
-"- c #646464",
-"; c #A8A8A8",
-"> c #DFF2FF",
-", c #F9FDFF",
-"' c #E0E7FB",
-") c #B1C3F7",
-"! c #F7FAFF",
-"~ c #FFFFFF",
-"{ c #DBDEEE",
-"] c #727EB7",
-"^ c #2A2928",
-"/ c #BBBBBB",
-"( c #E1E9FF",
-"_ c #FEFFFD",
-": c #BECDF6",
-"< c #E5ECFC",
-"[ c #E8EDFA",
-"} c #747CAA",
-"| c #85847F",
-"1 c #B8B8B8",
-"2 c #D4E6FF",
-"3 c #EBEEFB",
-"4 c #DDE5FB",
-"5 c #FEFFFF",
-"6 c #EFF3FE",
-"7 c #91ABF5",
-"8 c #B7BFE3",
-"9 c #7C7A7B",
-"0 c #878787",
-"a c #1A1A1A",
-"b c #D1E4FF",
-"c c #D8E1F8",
-"d c #FAFAFE",
-"e c #FFFFFE",
-"f c #D5E0FB",
-"g c #EFF0F9",
-"h c #FBFDFF",
-"i c #AAC0FA",
-"j c #B0C7FF",
-"k c #DEF0FF",
-"l c #8A8B8F",
-"m c #A4A49F",
-"n c #585857",
-"o c #D1E5FF",
-"p c #B9CAF5",
-"q c #C7D4F8",
-"r c #E4EBFC",
-"s c #F1F5FF",
-"t c #D4DDFD",
-"u c #C1C9E9",
-"v c #B2BEE9",
-"w c #D7E6FF",
-"x c #383428",
-"y c #8B8C90",
-"z c #D3E4FF",
-"A c #ABBEF3",
-"B c #BBCAF6",
-"C c #CAD8F8",
-"D c #CED9FC",
-"E c #B5C5FC",
-"F c #AFB4D7",
-"G c #DDE6FF",
-"H c #1D1B14",
-"I c #34322B",
-"J c #CFDCFF",
-"K c #C2D8FF",
-"L c #B8C8F4",
-"M c #ABBDF4",
-"N c #B8C9F6",
-"O c #D1DCFB",
-"P c #DAE2FE",
-"Q c #AFBAE2",
-"R c #CACDE3",
-"S c #F8FBFF",
-"T c #DAE7FF",
-"U c #C5D8FF",
-"V c #D5E6FF",
-"W c #5E6592",
-"X c #C4D3FF",
-"Y c #9BB1F2",
-"Z c #B0C4F5",
-"` c #D6DDF5",
-" . c #F5F6FA",
-".. c #E2EAFC",
-"+. c #DCE7FF",
-"@. c #515886",
-"#. c #C0D9FF",
-"$. c #B3C5FA",
-"%. c #FDFDFF",
-"&. c #FAFCFF",
-"*. c #E6EBFD",
-"=. c #DBDDEE",
-"-. c #CADBFF",
-";. c #FFFEFE",
-">. c #FEFDFF",
-",. c #F9FAFE",
-"'. c #C7D4F7",
-"). c #FDFDFE",
-"!. c #959AC1",
-"~. c #C7D7FF",
-"{. c #D2DEFC",
-"]. c #DCE5FF",
-"^. c #AFB3D2",
-"/. c #ADC1FF",
-"(. c #C7D2FF",
-"_. c #DBE0FA",
-":. c #D7DFF6",
-"<. c #A1AEDC",
-"[. c #98A1CC",
-" . ",
-" + @ # ",
-" $ % & * = @ @ - ; ",
-" > , ' ) ! ~ ~ { ] ^ / ",
-" ( ~ _ : < ~ ~ ~ [ } | 1 ",
-" 2 ~ ~ ~ 3 4 ~ 5 6 7 8 9 0 @ a ",
-" b c d e e f g h i j k l m n ",
-" o p q r s t u v w x @ y ",
-" z A B C D E F G H I J ",
-" K L M N O P Q R S T U V W ",
-" X Y Z 5 e ` .~ e ..+.@. ",
-" #.$.S %.~ &.*.~ ~ ~ =. ",
-" -.~ ;.>.,.'.).~ ~ !. ",
-" ~.~ ~ 5 {.].~ ^. ",
-" /.(._.:.<.[. ",
-" "};
+++ /dev/null
-/* XPM */
-static const char * type_directory_xpm[] = {
-"16 16 83 1",
-" c None",
-". c #3274DB",
-"+ c #3273DB",
-"@ c #3373DB",
-"# c #3274DC",
-"$ c #3170D6",
-"% c #F5FBFD",
-"& c #F5F9FD",
-"* c #306DD2",
-"= c #E8F5FD",
-"- c #E8F6FD",
-"; c #E9F5FD",
-"> c #5F7DB1",
-", c #316DD1",
-"' c #306ED1",
-") c #316ED2",
-"! c #306DD1",
-"~ c #306ACC",
-"{ c #DBF0FD",
-"] c #DAEEFD",
-"^ c #DBEEFD",
-"/ c #DAF0FD",
-"( c #2F66C6",
-"_ c #CBE8FD",
-": c #CBE9FD",
-"< c #255FD1",
-"[ c #2E63C0",
-"} c #B9E2FD",
-"| c #BCE2FD",
-"1 c #B9E1FD",
-"2 c #BCE1FD",
-"3 c #9EC6EE",
-"4 c #FCFCFD",
-"5 c #ACD1FD",
-"6 c #2D61BD",
-"7 c #A9DAFD",
-"8 c #A9DBFD",
-"9 c #86B9EC",
-"0 c #8CBDFD",
-"a c #89BEFD",
-"b c #89BDFD",
-"c c #2C5EB8",
-"d c #99D3FD",
-"e c #2259CB",
-"f c #6BAAFD",
-"g c #6BA9FD",
-"h c #2259CC",
-"i c #2B5AB1",
-"j c #88CBFD",
-"k c #1F52C5",
-"l c #5098FD",
-"m c #4F98FD",
-"n c #4F97FD",
-"o c #1E52C5",
-"p c #2A58AE",
-"q c #7AC4FD",
-"r c #1C49BD",
-"s c #3987FD",
-"t c #3988FD",
-"u c #1B49BD",
-"v c #2955A8",
-"w c #6DBEFD",
-"x c #1840B5",
-"y c #287CFD",
-"z c #287BFD",
-"A c #277BFD",
-"B c #183FB5",
-"C c #2852A3",
-"D c #62B7FD",
-"E c #1337AA",
-"F c #FDFDFD",
-"G c #AEAEC6",
-"H c #1337AC",
-"I c #28509F",
-"J c #102DA2",
-"K c #274D9B",
-"L c #4FAEFD",
-"M c #0B2599",
-"N c #0C2599",
-"O c #274B97",
-"P c #091D91",
-"Q c #091E91",
-"R c #091E90",
-" .+@#.. ",
-" $%&%&&&$ ",
-"*===-=;=>,')'!, ",
-"~{{{{{]{^^]{^{/~",
-"(_______:<<<<<<<",
-"[}}|}|12<344445<",
-"678<<<<<940aabb<",
-"cdef44444gfggggh",
-"ijklmmnlmmmmlmno",
-"pqrsttstsstttstu",
-"vwxyyzyzzzAzAzzB",
-"CDEFFFFFFFFFFFGH",
-"IDJFFFFFFFFFFFGJ",
-"KLMGGGGGGGGGGGGN",
-" OPPPQRQRPRRQQP ",
-" "};
+++ /dev/null
-/* XPM */
-static const char * type_disc_xpm[] = {
-"16 16 91 1",
-" c None",
-". c #676767",
-"+ c #989898",
-"@ c #B7B7B7",
-"# c #BEBEBE",
-"$ c #919191",
-"% c #5B5B5B",
-"& c #CDCDCD",
-"* c #FEFEFE",
-"= c #FFFFFF",
-"- c #FDFDFD",
-"; c #BDBDBD",
-"> c #717171",
-", c #F3F3F3",
-"' c #FBFBFB",
-") c #F9F9F9",
-"! c #F7F7F7",
-"~ c #FAFAFA",
-"{ c #EDEDED",
-"] c #4A4A4A",
-"^ c #DFDFDF",
-"/ c #E4E4E4",
-"( c #F1F1F1",
-"_ c #F8F8F8",
-": c #F4F4F4",
-"< c #E5E5E5",
-"[ c #AEAEAE",
-"} c #D8D8D8",
-"| c #D6D6D6",
-"1 c #E2E2E2",
-"2 c #F5F5F5",
-"3 c #FCFCFC",
-"4 c #979797",
-"5 c #CFCFCF",
-"6 c #CCCCCC",
-"7 c #D7D7D7",
-"8 c #EBEBEB",
-"9 c #EEEEEE",
-"0 c #EAEAEA",
-"a c #E7E7E7",
-"b c #D5D5D5",
-"c c #6B6B6B",
-"d c #C8C8C8",
-"e c #E3E3E3",
-"f c #DBDBDB",
-"g c #C3C3C3",
-"h c #EFEFEF",
-"i c #DDDDDD",
-"j c #D2D2D2",
-"k c #D1D1D1",
-"l c #484848",
-"m c #787878",
-"n c #CBCBCB",
-"o c #CECECE",
-"p c #E6E6E6",
-"q c #C9C9C9",
-"r c #C4C4C4",
-"s c #5A5A5A",
-"t c #757575",
-"u c #E1E1E1",
-"v c #E9E9E9",
-"w c #E0E0E0",
-"x c #7D7D7D",
-"y c #BCBCBC",
-"z c #B9B9B9",
-"A c #515151",
-"B c #545454",
-"C c #DEDEDE",
-"D c #E8E8E8",
-"E c #DCDCDC",
-"F c #C7C7C7",
-"G c #BABABA",
-"H c #BBBBBB",
-"I c #C1C1C1",
-"J c #333333",
-"K c #ECECEC",
-"L c #C0C0C0",
-"M c #A6A6A6",
-"N c #777777",
-"O c #C2C2C2",
-"P c #C6C6C6",
-"Q c #555555",
-"R c #828282",
-"S c #9E9E9E",
-"T c #848484",
-"U c #9B9B9B",
-"V c #B4B4B4",
-"W c #DADADA",
-"X c #454545",
-"Y c #313131",
-"Z c #2F2F2F",
-" .+@#$ ",
-" %&*====-; ",
-" >,='')!~-={] ",
-" ^/(_)!:!)-=< ",
-" [}|1:~_2!3-!*4 ",
-" 567^8,90!-:8ab ",
-"cd6}1efg&<haijkl",
-"mnofpin |}7q;rs",
-"t}7uvw7.xd&dyzrA",
-"BC1D{!wEf6F;GHIJ",
-" o{{_~KpK0d@GLM ",
-" N_~~{^p{DuOzPQ ",
-" [=hwjCD<ae&R ",
-" S/fqE88h/T ",
-" QUV5WnUX ",
-" YZ "};
+++ /dev/null
-/* XPM */
-static const char * type_net_xpm[] = {
-"16 16 154 2",
-" c None",
-". c #667AAC",
-"+ c #8293BC",
-"@ c #8192BA",
-"# c #6677A0",
-"$ c #8C9BC3",
-"% c #E9EBF5",
-"& c #F8F8FC",
-"* c #FDFCFE",
-"= c #FFFFFF",
-"- c #FCFCFF",
-"; c #E7EBF9",
-"> c #8996B4",
-", c #99A5CD",
-"' c #E7E8F2",
-") c #CED2DD",
-"! c #C0C6D6",
-"~ c #CBD1E1",
-"{ c #E7E9F4",
-"] c #E8EAF5",
-"^ c #E7E8F4",
-"/ c #F0F2FE",
-"( c #919DC3",
-"_ c #53659F",
-": c #B3BBD7",
-"< c #98A2BB",
-"[ c #93A0BE",
-"} c #98A5C5",
-"| c #C8CEE1",
-"1 c #D5D8E7",
-"2 c #CBCFE0",
-"3 c #D0D4E5",
-"4 c #D7DBEC",
-"5 c #D0D5EF",
-"6 c #47578E",
-"7 c #3E579E",
-"8 c #5F709B",
-"9 c #7084B1",
-"0 c #7588B6",
-"a c #CBD1E5",
-"b c #EBEDF6",
-"c c #E2E6F1",
-"d c #D9DCEB",
-"e c #D3D7E9",
-"f c #CBCFE5",
-"g c #C0C5E2",
-"h c #7B89C2",
-"i c #29396C",
-"j c #6273AF",
-"k c #56699E",
-"l c #4A619B",
-"m c #49629E",
-"n c #A2AECE",
-"o c #E4E7F0",
-"p c #E9EBF3",
-"q c #E3E5F2",
-"r c #D4D8EB",
-"s c #C0C5DF",
-"t c #8D97BF",
-"u c #6F7FBD",
-"v c #1F2B51",
-"w c #3B4C83",
-"x c #98A1D3",
-"y c #A7AFD6",
-"z c #7481A9",
-"A c #1F397C",
-"B c #234089",
-"C c #2C4789",
-"D c #AEB7D0",
-"E c #EBEDF7",
-"F c #D4D8EC",
-"G c #959FC6",
-"H c #364B86",
-"I c #4159A0",
-"J c #152652",
-"K c #303D69",
-"L c #919CD1",
-"M c #AAB1D9",
-"N c #6B79A3",
-"O c #072670",
-"P c #0B2C7C",
-"Q c #001F73",
-"R c #7989B5",
-"S c #EDEDF8",
-"T c #B4BCDB",
-"U c #253D7D",
-"V c #374B87",
-"W c #4A62AA",
-"X c #05143D",
-"Y c #8490C8",
-"Z c #5A699A",
-"` c #123079",
-" . c #0A2B7C",
-".. c #0F2F7E",
-"+. c #09297A",
-"@. c #3B5495",
-"#. c #B6BDDB",
-"$. c #485F9C",
-"%. c #09266D",
-"&. c #5D6B9E",
-"*. c #7483BD",
-"=. c #415186",
-"-. c #2F488D",
-";. c #102E7A",
-">. c #1A3885",
-",. c #24418A",
-"'. c #29458D",
-"). c #27438B",
-"!. c #28438C",
-"~. c #0F2E7D",
-"{. c #233F89",
-"]. c #284694",
-"^. c #172C60",
-"/. c #294183",
-"(. c #39549C",
-"_. c #455D9D",
-":. c #4C62A0",
-"<. c #5065A1",
-"[. c #4D63A0",
-"}. c #455C9C",
-"|. c #41599B",
-"1. c #314E99",
-"2. c #0E2766",
-"3. c #2F3E6D",
-"4. c #6375AE",
-"5. c #7D8DC2",
-"6. c #7A88BC",
-"7. c #7C8BBF",
-"8. c #7385BC",
-"9. c #5065A0",
-"0. c #1F305C",
-"a. c #363D58",
-"b. c #888FB2",
-"c. c #676D8F",
-"d. c #282F49",
-"e. c #C6C6C9",
-"f. c #8A8A8C",
-"g. c #A8A8AF",
-"h. c #C6C6CC",
-"i. c #B9B9C0",
-"j. c #C2C2C6",
-"k. c #DADAD9",
-"l. c #ADADB2",
-"m. c #ABABB1",
-"n. c #CCCCD2",
-"o. c #8A8A91",
-"p. c #373739",
-"q. c #39393C",
-"r. c #626268",
-"s. c #68686C",
-"t. c #6C6C6E",
-"u. c #555559",
-"v. c #313134",
-"w. c #38383A",
-" . + @ # ",
-" $ % & * = - ; > ",
-" , ' ) ! ~ { ] ^ / ( ",
-" _ : < [ } | 1 2 3 4 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 x y z A B C D E F G H I J ",
-" K L M N O P Q R S T U V W X ",
-" Y Z ` ...+.@.#.$.%.&.*. ",
-" =.-.;.>.,.'.).!.~.{.].^. ",
-" /.(._.:.<.[.}.|.1.2. ",
-" 3.4.5.6.7.8.9.0. ",
-" a.b.c.d. ",
-" e.f. ",
-" g.h.i.j.k.k.l.m.n.o. ",
-" p.q.r.s.t.u.v.w. "};
+++ /dev/null
-/* XPM */
-static const char * type_node_xpm[] = {
-"16 16 55 1",
-" c None",
-". c #949494",
-"+ c #919191",
-"@ c #FAFAFA",
-"# c #8F8F8F",
-"$ c #F5F5F5",
-"% c #F6F6F6",
-"& c #999999",
-"* c #909090",
-"= c #8D8D8D",
-"- c #F0F0F0",
-"; c #EFEFEF",
-"> c #898989",
-", c #E9E9E9",
-"' c #888888",
-") c #868686",
-"! c #E2E2E2",
-"~ c #E3E3E3",
-"{ c #D0D0D0",
-"] c #FDFDFD",
-"^ c #DCDCDC",
-"/ c #848484",
-"( c #DBDBDB",
-"_ c #C4C4C4",
-": c #CECECE",
-"< c #CDCDCD",
-"[ c #828282",
-"} c #D4D4D4",
-"| c #BFBFBF",
-"1 c #858585",
-"2 c #7E7E7E",
-"3 c #CCCCCC",
-"4 c #808080",
-"5 c #B1B1B1",
-"6 c #7F7F7F",
-"7 c #7C7C7C",
-"8 c #C6C6C6",
-"9 c #7A7A7A",
-"0 c #A5A5A5",
-"a c #797979",
-"b c #C0C0C0",
-"c c #747474",
-"d c #9C9C9C",
-"e c #9B9B9B",
-"f c #777777",
-"g c #BABABA",
-"h c #6D6D6D",
-"i c #FEFEFE",
-"j c #6E6E6E",
-"k c #676767",
-"l c #727272",
-"m c #606060",
-"n c #707070",
-"o c #5B5B5B",
-"p c #5A5A5A",
-" ...... ",
-" +@@@@@@+ ",
-"#$$$$$%$&##*### ",
-"=-----;---;---;=",
-">,,,,,,,,'''''''",
-")!!~!~!~'{]]]]^'",
-"/(('''''_]:<<<<'",
-"[}/|]]]]]||||||1",
-"2345555555555556",
-"7890000000000009",
-"abcdddddddededdc",
-"fghiiiiiiiiiii8j",
-"cgkiiiiiiiiiii8k",
-"l5m888888888888m",
-" noopopopoppooo ",
-" "};
+++ /dev/null
-/* XPM */
-static const char * type_playlist_xpm[] = {
-"16 16 126 2",
-" c None",
-". c #959695",
-"+ c #000000",
-"@ c #0E0E0E",
-"# c #282828",
-"$ c #696969",
-"% c #DADBDA",
-"& c #E4E5E4",
-"* c #E6E7E6",
-"= c #D3D3D3",
-"- c #FFFFFF",
-"; c #F9F9F9",
-"> c #F9F9F8",
-", c #E7E7E7",
-"' c #E4E4E4",
-") c #CDCDCD",
-"! c #252525",
-"~ c #C8C9C8",
-"{ c #E3E4E3",
-"] c #F6F6F6",
-"^ c #DADADA",
-"/ c #9F9F9F",
-"( c #FEFEFE",
-"_ c #FCFCFB",
-": c #FBFBFB",
-"< c #F2F2F2",
-"[ c #AFAFAE",
-"} c #E9E9E9",
-"| c #B3B3B3",
-"1 c #383838",
-"2 c #CECFCE",
-"3 c #9E9E9E",
-"4 c #FDFDFD",
-"5 c #FAFAF9",
-"6 c #F3F3F3",
-"7 c #A9A9A8",
-"8 c #F0F0F0",
-"9 c #F4F4F4",
-"0 c #ABABAB",
-"a c #414141",
-"b c #9D9D9C",
-"c c #9A9A9A",
-"d c #9A9A99",
-"e c #9B9B9A",
-"f c #9D9C9C",
-"g c #0A0A0A",
-"h c #9B9B9B",
-"i c #F8F8F7",
-"j c #F7F6F5",
-"k c #F6F6F4",
-"l c #F4F3F2",
-"m c #F1F0EF",
-"n c #F0EFED",
-"o c #E5E4E2",
-"p c #848381",
-"q c #6A6763",
-"r c #F8F7F6",
-"s c #989897",
-"t c #989796",
-"u c #EBEAE8",
-"v c #E1DFDC",
-"w c #B6B6B4",
-"x c #72706C",
-"y c #B1B0AF",
-"z c #818180",
-"A c #AFAFAD",
-"B c #EFEFED",
-"C c #EFEEEC",
-"D c #ECEBE9",
-"E c #E8E7E5",
-"F c #A4A4A1",
-"G c #C4C3C0",
-"H c #817D74",
-"I c #7F7F7E",
-"J c #7F7E7D",
-"K c #EEEDEB",
-"L c #EDECEA",
-"M c #E8E7E4",
-"N c #E7E6E3",
-"O c #8B867D",
-"P c #7D7D7C",
-"Q c #ACABA9",
-"R c #91908E",
-"S c #8E8E8C",
-"T c #E6E4E1",
-"U c #A2A19F",
-"V c #646462",
-"W c #A49E93",
-"X c #7C7B7A",
-"Y c #7B7B7A",
-"Z c #E7E5E2",
-"` c #E4E3DF",
-" . c #E3E2DE",
-".. c #DEDDD9",
-"+. c #DDDCD8",
-"@. c #E0DFDB",
-"#. c #A19C90",
-"$. c #E6E5E2",
-"%. c #E5E4E1",
-"&. c #8E8E8B",
-"*. c #747371",
-"=. c #0B0B0B",
-"-. c #DCDBD7",
-";. c #DBD9D5",
-">. c #A19B90",
-",. c #E3E2DF",
-"'. c #E4E2DF",
-"). c #DCDAD6",
-"!. c #D9D7D3",
-"~. c #E1E0DC",
-"{. c #E2E1DD",
-"]. c #71716F",
-"^. c #0B0B0A",
-"/. c #706F6D",
-"(. c #D8D6D1",
-"_. c #9F998D",
-":. c #999891",
-"<. c #A39D92",
-"[. c #A39D91",
-"}. c #A29C90",
-"|. c #A19B8F",
-"1. c #9D978C",
-"2. c #9B968A",
-"3. c #676359",
-"4. c #919191",
-"5. c #757575",
-". + + + + + + + + + @ # $ % & * ",
-"+ = - - - - - ; > > , ' ) ! ~ { ",
-"+ ] ^ / - ( _ : > < [ } - | 1 2 ",
-"+ - / 3 4 _ 5 > > 6 7 8 - 9 0 a ",
-"+ - 4 b : 5 c d e f } + + + + g ",
-"+ - : h > i j k l m n n o p q + ",
-"+ - > i r j s t t t l u v w x + ",
-"+ - y z A B n C D E + + F G H + ",
-"+ - I B J K L D M N + + + v O + ",
-"+ - L P Q D R R S T + U V v W + ",
-"+ - X X Y M N Z ` .+ ..+.@.#.+ ",
-"+ - $.$.$.%.&.*.=.=.+ -.;.+.>.+ ",
-"+ - ,. .'.` .+ + + + ).!.-.>.+ ",
-"+ - v ~.@.{.~.].=.^./.!.(.!._.+ ",
-"+ :.W <.[.<.}.|.>._._.1.1.2.3.+ ",
-"4.+ + + + + + + + + + + + + + 5."};
+++ /dev/null
-/* XPM */
-static const char * type_unknown_xpm[] = {
-"16 16 4 1",
-" c None",
-". c #FFFFFF",
-"+ c #000000",
-"@ c #BFBFBF",
-"................",
-"..++++++++......",
-"..+......++.....",
-"..+.+.+..+.+....",
-"..+......++++...",
-"..+.+.+.....+...",
-".@+.........+...",
-"..+.+.+.+.+.+...",
-"..+.........+...",
-"..+.+.+.+.+.+...",
-"..+.........+...",
-"..+.+.+.+.+.+...",
-"..+.........+...",
-"..+++++++++++...",
-"................",
-"................"};
+++ /dev/null
-/* XPM */
-static const char * type_vfile_xpm[] = {
-"16 16 108 2",
-" c None",
-". c #8F8F8F",
-"+ c #FFFFFF",
-"@ c #B0B0B0",
-"# c #A7A7A7",
-"$ c #939393",
-"% c #8B8B8B",
-"& c #2B2B2B",
-"* c #0C0C0C",
-"= c #010101",
-"- c #000000",
-"; c #EFEFEF",
-"> c #ECECEC",
-", c #E8E8E8",
-"' c #E9E9E9",
-") c #DFDFDF",
-"! c #DCDCDC",
-"~ c #E3E3E3",
-"{ c #DADADA",
-"] c #D5D5D5",
-"^ c #D4D4D4",
-"/ c #D2D2D2",
-"( c #A6A6A6",
-"_ c #828181",
-": c #F2F2F2",
-"< c #FBFBFB",
-"[ c #FAFAFA",
-"} c #929292",
-"| c #3B3A3A",
-"1 c #656769",
-"2 c #626261",
-"3 c #E6E6E5",
-"4 c #FDFDFD",
-"5 c #868685",
-"6 c #292827",
-"7 c #9CA4AF",
-"8 c #E1F2FF",
-"9 c #A6AEB4",
-"0 c #5B5C5B",
-"a c #D7D7D7",
-"b c #F8F8F8",
-"c c #787777",
-"d c #1D1D1D",
-"e c #787C80",
-"f c #B6C2D2",
-"g c #E0F0FF",
-"h c #F3FEFF",
-"i c #C3C6C8",
-"j c #666666",
-"k c #CCCCCB",
-"l c #F4F4F4",
-"m c #707070",
-"n c #767E86",
-"o c #EAF8FF",
-"p c #BFC6D0",
-"q c #C4CCD6",
-"r c #EBF4FF",
-"s c #767575",
-"t c #9C9C9C",
-"u c #EDEDED",
-"v c #636363",
-"w c #0E0F0F",
-"x c #595C60",
-"y c #88909B",
-"z c #E6F1FD",
-"A c #F1FDFF",
-"B c #D4DBE1",
-"C c #CDCED0",
-"D c #7B7B7A",
-"E c #949494",
-"F c #F7F7F7",
-"G c #878787",
-"H c #0E0E0E",
-"I c #999A9B",
-"J c #ABB3BB",
-"K c #858D97",
-"L c #CCD7E5",
-"M c #B0B3B6",
-"N c #676665",
-"O c #A0A0A0",
-"P c #E4E4E4",
-"Q c #616161",
-"R c #7E7E80",
-"S c #F1F8FC",
-"T c #F7FFFF",
-"U c #A0ABB5",
-"V c #363738",
-"W c #363535",
-"X c #AEAEAE",
-"Y c #FCFCFC",
-"Z c #F1F1F1",
-"` c #FEFEFE",
-" . c #EEEEEE",
-".. c #686766",
-"+. c #76797D",
-"@. c #C5CFDC",
-"#. c #6A6D70",
-"$. c #3C3B3A",
-"%. c #BEBEBE",
-"&. c #A8A8A8",
-"*. c #F9F9F9",
-"=. c #F6F6F5",
-"-. c #767675",
-";. c #444444",
-">. c #525151",
-",. c #CFCFCF",
-"'. c #F0F0F0",
-"). c #ADADAD",
-". . . . . . . . . . . . . . . . ",
-". + @ # $ % & * = - - - - - + . ",
-". + ; > , ' ) ! ~ ~ { ] ^ / + . ",
-". + + + + + + + ( _ : + < [ + . ",
-". + + + + + + } | 1 2 3 4 : + . ",
-". + + + + + 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 x y z A B C D E F + . ",
-". + G H I + J K L M N O 4 F + . ",
-". + P Q R S T U V W X Y Z ; + . ",
-". + ` ...+.@.#.$.%.< &.&.&.&.. ",
-". + *.` =.-.;.>.,.+ '.&.+ + . ",
-". + < < ` b ).a + 4 : &.+ . ",
-". + + + + + + + + + Y &.. ",
-". . . . . . . . . . . . "};
+++ /dev/null
-/* XPM */
-static const char * update_ascii_xpm[] = {
-"34 34 96 2",
-" c None",
-". c #BCBCBC",
-"+ c #F7F7F7",
-"@ c #F3F3F3",
-"# c #F1F1F1",
-"$ c #EFEFEF",
-"% c #ECECEC",
-"& c #EAEAEA",
-"* c #E9E9E9",
-"= c #C2C2C2",
-"- c #808080",
-"; c #FFFFFF",
-"> c #FEFEFE",
-", c #FBFBFB",
-"' c #F2F2F2",
-") c #EEEEEE",
-"! c #E3E3E3",
-"~ c #BDBDBD",
-"{ c #C0C0C0",
-"] c #BBBBBB",
-"^ c #B6B6B6",
-"/ c #AFAFAF",
-"( c #A2A2A2",
-"_ c #8E8E8E",
-": c #828282",
-"< c #FCFCFC",
-"[ c #F8F8F8",
-"} c #AEAEAE",
-"| c #A9A9A9",
-"1 c #9E9E9E",
-"2 c #C4C4C4",
-"3 c #BABABA",
-"4 c #CACACA",
-"5 c #C9C9C9",
-"6 c #B5B5B5",
-"7 c #F9F9F9",
-"8 c #E0E0E0",
-"9 c #CCCCCC",
-"0 c #BEBEBE",
-"a c #FDFDFD",
-"b c #FAFAFA",
-"c c #F5F5F5",
-"d c #BFBFBF",
-"e c #A0A0A0",
-"f c #D5D5D5",
-"g c #C6C6C6",
-"h c #F4F4F4",
-"i c #C1C1C1",
-"j c #E1E1E1",
-"k c #DBDBDB",
-"l c #CECECE",
-"m c #F6F6F6",
-"n c #D4D4D4",
-"o c #E4E4E4",
-"p c #DEDEDE",
-"q c #D1D1D1",
-"r c #EBEBEB",
-"s c #B8B8B8",
-"t c #B7B7B7",
-"u c #DCDCDC",
-"v c #D3D3D3",
-"w c #F0F0F0",
-"x c #E8E8E8",
-"y c #868686",
-"z c #DADADA",
-"A c #D2D2D2",
-"B c #E7E7E7",
-"C c #878787",
-"D c #888888",
-"E c #E5E5E5",
-"F c #E2E2E2",
-"G c #D7D7D7",
-"H c #DFDFDF",
-"I c #D0D0D0",
-"J c #E6E6E6",
-"K c #DDDDDD",
-"L c #767676",
-"M c #777777",
-"N c #CDCDCD",
-"O c #EDEDED",
-"P c #D8D8D8",
-"Q c #B9B9B9",
-"R c #D6D6D6",
-"S c #B3B3B3",
-"T c #CBCBCB",
-"U c #CFCFCF",
-"V c #787878",
-"W c #ACACAC",
-"X c #A6A6A6",
-"Y c #9D9D9D",
-"Z c #9A9A9A",
-"` c #969696",
-" . c #919191",
-".. c #8C8C8C",
-"+. c #848484",
-"@. c #818181",
-" ",
-" . . . . . . . . . . . . . . . . ",
-" . + + + + + + + + @ # $ % & * = - ",
-" . + ; ; ; ; ; ; ; ; > ; , ' ) = ; - ",
-" . + ; ; ; ; ; ; ; ; > ; ; , ' = ; ; - ",
-" . + ; ; ; ; ; ; ; ; > ; ; ; , = ! ; ; - ",
-" . + ; ; ; ; ; ; ; ; > ; ; ; ; = ! ! ; ; - ",
-" . + ; ; ; ; ; ; ; ; > ; ; ; ; = ! ! ! ; ; - ",
-" . + ; ; ; ; ; ; ; ; > ; ; ; ; = ! ! ! ! ; ; - ",
-" . + ; ; ; ; ; ; ; ; > ; ; ; ; ~ { ] ^ / ( _ : - ",
-" . + ; ; ; ; ; ; ; ; > ; ; ; ; < [ # } | 1 2 / - ",
-" . + ; ; ; ; ; ; ; ; ; ; ; ; ; ; , ' ] 3 4 5 6 - ",
-" . + ; ; ; ; ; ; ; ; ; ; ; ; < 7 + $ ~ 1 8 9 0 - ",
-" . + ; ; ; ; ; ; ; ; ; ; a b + c # $ d e 8 f g - ",
-" . + ; ; ; ; ; ; ; ; ; b [ + h # $ ) i ( j k l - ",
-" . + ; ; ; ; ; ; ; < 7 + m @ ' $ $ & n o ! p q - ",
-" . + ; ; ; ; ; ; , 7 [ c c ' $ $ r * s t n u v - ",
-" . + ; ; ; ; ; , b [ m c ' w $ % * x 3 y 8 z A - ",
-" . + ; ; ; ; < < [ [ m @ # $ % * x B ] C 8 u q - ",
-" . + ; ; ; ; , b + m @ # $ % * x B o . D 8 z A - ",
-" . + ; ; ; , b + c h # $ % * * E o F n 8 8 G q - ",
-" . + ; ; , 7 [ c @ # ) % & x E o j H ^ 6 u f I - ",
-" . + ; , 7 + c ' w ) % & B J ! j H K t L 8 n l - ",
-" . + ; 7 m h ' w ) r * x o ! j p K k t M 8 n N - ",
-" . + b m h ' w O r * x o F j p K k P Q M 8 q l - ",
-" Q + [ h # $ O r * B J F j p u k P R n 8 8 N N - ",
-" 6 + c # $ O r * B J F 8 p u k G R v Q s H 4 9 - ",
-" S + @ $ O r * B o ! 8 p u z G f v q Q M 8 4 T - ",
-" / + # O r * B o F 8 K u z G f v I U s V 8 4 5 - ",
-" W + ) r * B o ! F 8 u k P n n q q N Q V 8 4 5 - ",
-" | + x J ! j H u z P R n n A I U l N n ! 8 5 5 - ",
-" | X ( Y Z ` ...D +.@.- - - - - - - - - - - - - ",
-" ",
-" "};
+++ /dev/null
-/* XPM */
-static const char * update_binary_xpm[] = {
-"34 34 292 2",
-" c None",
-". c #BCBCBC",
-"+ c #F7F7F7",
-"@ c #F3F3F3",
-"# c #F1F1F1",
-"$ c #EFEFEF",
-"% c #ECECEC",
-"& c #EAEAEA",
-"* c #E9E9E9",
-"= c #C2C2C2",
-"- c #808080",
-"; c #FFFFFF",
-"> c #FEFEFE",
-", c #FBFBFB",
-"' c #F2F2F2",
-") c #EEEEEE",
-"! c #E3E3E3",
-"~ c #647EAA",
-"{ c #5B77A6",
-"] c #6584AD",
-"^ c #718DB3",
-"/ c #5F7FAA",
-"( c #6080AB",
-"_ c #5C7AA7",
-": c #6684AC",
-"< c #5D7EAA",
-"[ c #6E97BD",
-"} c #6F98BE",
-"| c #6082AD",
-"1 c #F6F6F8",
-"2 c #FDFDFD",
-"3 c #BDBDBD",
-"4 c #C0C0C0",
-"5 c #BBBBBB",
-"6 c #B6B6B6",
-"7 c #AFAFAF",
-"8 c #A2A2A2",
-"9 c #8E8E8E",
-"0 c #828282",
-"a c #FBFCFD",
-"b c #5A79A7",
-"c c #6081AB",
-"d c #6385AE",
-"e c #688CB1",
-"f c #7CA1C3",
-"g c #799FC2",
-"h c #D8E2ED",
-"i c #F5F6F7",
-"j c #F9F9F9",
-"k c #F8F8F8",
-"l c #DBDBDB",
-"m c #D0D0D0",
-"n c #C4C4C4",
-"o c #5975A4",
-"p c #607BA8",
-"q c #5C78A7",
-"r c #6587AE",
-"s c #7298BF",
-"t c #7CA2C5",
-"u c #84A7C7",
-"v c #8AABC9",
-"w c #D7E2EC",
-"x c #5D7BA8",
-"y c #E8E8E8",
-"z c #E2E2E2",
-"A c #D8D8D8",
-"B c #C9C9C9",
-"C c #B5B5B5",
-"D c #5D7DA8",
-"E c #C3D4E4",
-"F c #E3EBF2",
-"G c #DCE6EF",
-"H c #B7CBDE",
-"I c #80A4C5",
-"J c #96B4CF",
-"K c #9CB8D3",
-"L c #ABC2D8",
-"M c #E1E2E5",
-"N c #EEEFF0",
-"O c #EBEBEB",
-"P c #E4E4E4",
-"Q c #DADADA",
-"R c #CCCCCC",
-"S c #BEBEBE",
-"T c #A9C1D8",
-"U c #E6EDF3",
-"V c #B0C5DB",
-"W c #91B1CE",
-"X c #A0BAD3",
-"Y c #98B6D1",
-"Z c #9EB9D3",
-"` c #A6BFD7",
-" . c #ADC4DA",
-".. c #C1D2E2",
-"+. c #DDE7F0",
-"@. c #7F9AB8",
-"#. c #E0E1E3",
-"$. c #EBEBEC",
-"%. c #D5D5D5",
-"&. c #C6C6C6",
-"*. c #B9CDE0",
-"=. c #D4E0EB",
-"-. c #97B5D0",
-";. c #749CC1",
-">. c #6386AE",
-",. c #5771A2",
-"'. c #A7C0D8",
-"). c #B1C6DC",
-"!. c #BBCEE0",
-"~. c #CBDAE8",
-"{. c #D1DEEA",
-"]. c #718DB1",
-"^. c #E5E5E6",
-"/. c #E7E7E7",
-"(. c #DEDEDE",
-"_. c #CECECE",
-":. c #E0E8F1",
-"<. c #5976A6",
-"[. c #6279A5",
-"}. c #B7BBC4",
-"|. c #B9BDC5",
-"1. c #B2C8DD",
-"2. c #C9D8E6",
-"3. c #DFE8F0",
-"4. c #6082AB",
-"5. c #D5D6D9",
-"6. c #E1E1E2",
-"7. c #E0E0E0",
-"8. c #D1D1D1",
-"9. c #D9E4EE",
-"0. c #A4BED7",
-"a. c #BABEC7",
-"b. c #BFC3CB",
-"c. c #C2C5CC",
-"d. c #6182AE",
-"e. c #D0DEE9",
-"f. c #C6D5E5",
-"g. c #8DAECC",
-"h. c #5A76A5",
-"i. c #D5D6D8",
-"j. c #E5E5E5",
-"k. c #DCDCDC",
-"l. c #D3D3D3",
-"m. c #668AAF",
-"n. c #86A9C9",
-"o. c #B5BAC3",
-"p. c #BEC2CA",
-"q. c #C9CCD2",
-"r. c #D1D3D8",
-"s. c #D9DBDF",
-"t. c #94B3CF",
-"u. c #5A78A5",
-"v. c #C9CACE",
-"w. c #D2D2D2",
-"x. c #C4D5E5",
-"y. c #B8BCC5",
-"z. c #CED1D7",
-"A. c #DEDFE3",
-"B. c #EAEBED",
-"C. c #7AA0C3",
-"D. c #6589AE",
-"E. c #BEC0C6",
-"F. c #DFDFDF",
-"G. c #5F80AA",
-"H. c #6D94BC",
-"I. c #698EB4",
-"J. c #CEDCE9",
-"K. c #678BB0",
-"L. c #BDC1C9",
-"M. c #E4E6E9",
-"N. c #EFF0F1",
-"O. c #DBE5EE",
-"P. c #E6ECF3",
-"Q. c #5972A1",
-"R. c #A8ACB4",
-"S. c #B8BBC1",
-"T. c #81A5C6",
-"U. c #A3BCD4",
-"V. c #637AA6",
-"W. c #C6C9D0",
-"X. c #DEE0E4",
-"Y. c #EEEFF1",
-"Z. c #F5F7FA",
-"`. c #6177A3",
-" + c #A5A9B2",
-".+ c #ABAFB7",
-"++ c #BBBEC3",
-"@+ c #DDDDDD",
-"#+ c #D7D7D7",
-"$+ c #9AB6D1",
-"%+ c #6382AB",
-"&+ c #CBCED4",
-"*+ c #D6E1EB",
-"=+ c #EBF1F6",
-"-+ c #CCDAE9",
-";+ c #ABAEB6",
-">+ c #B7BABF",
-",+ c #C7C9CC",
-"'+ c #A3BDD6",
-")+ c #AEC5DB",
-"!+ c #EFF2F6",
-"~+ c #F6F9FB",
-"{+ c #A4A8B1",
-"]+ c #B8BBC0",
-"^+ c #D2D3D4",
-"/+ c #D4D4D4",
-"(+ c #5E7EA9",
-"_+ c #B4C9DD",
-":+ c #BECFE1",
-"<+ c #EAF0F5",
-"[+ c #F9FBFC",
-"}+ c #FCFDFD",
-"|+ c #657EA7",
-"1+ c #B3B6BC",
-"2+ c #C6C7CB",
-"3+ c #D6D6D6",
-"4+ c #CDCDCD",
-"5+ c #C2D3E3",
-"6+ c #D1DFEA",
-"7+ c #E4ECF3",
-"8+ c #ACC3D9",
-"9+ c #E9EEF4",
-"0+ c #85A8C8",
-"a+ c #BBBDC2",
-"b+ c #CDCED0",
-"c+ c #D4D5D5",
-"d+ c #9BB7D2",
-"e+ c #B6B9BE",
-"f+ c #CACBCD",
-"g+ c #D3D3D4",
-"h+ c #F2F6F9",
-"i+ c #6079A4",
-"j+ c #A3A7AF",
-"k+ c #B0B3B8",
-"l+ c #C6C7C9",
-"m+ c #CFD0D0",
-"n+ c #CACACA",
-"o+ c #B4B8C0",
-"p+ c #93B2CE",
-"q+ c #A3A7B0",
-"r+ c #A1A5AE",
-"s+ c #A1A5AD",
-"t+ c #A5A8B0",
-"u+ c #B3B5BA",
-"v+ c #C5C6C8",
-"w+ c #CECECF",
-"x+ c #CBCBCB",
-"y+ c #909398",
-"z+ c #BFC2C9",
-"A+ c #B8BBC3",
-"B+ c #82A6C7",
-"C+ c #5771A1",
-"D+ c #ADB1B7",
-"E+ c #B0B3B9",
-"F+ c #AFB2B8",
-"G+ c #AEB0B6",
-"H+ c #BFC1C4",
-"I+ c #C9CACB",
-"J+ c #9D9EA1",
-"K+ c #D6D8DC",
-"L+ c #C9CCD1",
-"M+ c #BDBFC6",
-"N+ c #A5A9B1",
-"O+ c #B7BAC0",
-"P+ c #C2C3C7",
-"Q+ c #C7C9CB",
-"R+ c #C6C7CA",
-"S+ c #C3C4C7",
-"T+ c #CACACB",
-"U+ c #CFCFCF",
-"V+ c #A4A5A5",
-"W+ c #EBEBED",
-"X+ c #DADBDD",
-"Y+ c #CDCFD2",
-"Z+ c #BABCC2",
-"`+ c #A7ABB2",
-" @ c #B3B6BB",
-".@ c #C2C4C7",
-"+@ c #CDCDCF",
-"@@ c #D0D1D1",
-"#@ c #CECFCF",
-"$@ c #CDCDCE",
-"%@ c #A8A8A8",
-"&@ c #A4A4A5",
-"*@ c #9F9FA0",
-"=@ c #969798",
-"-@ c #8B8D90",
-";@ c #7E8086",
-">@ c #777A7F",
-",@ c #76797E",
-"'@ c #7B7C80",
-")@ c #7F7F81",
-" ",
-" . . . . . . . . . . . . . . . . ",
-" . + + + + + + + + @ # $ % & * = - ",
-" . + ; ; ; ; ; ; ; ; > ; , ' ) = ; - ",
-" . + ; ; ; ; ; ; ; ; > ; ; , ' = ; ; - ",
-" . + ; ; ; ; ; ; ; ; > ; ; ; , = ! ; ; - ",
-" . + ; ; ; ; ; ; ; ; > ; ; ; ; = ! ! ; ; - ",
-" . + ; ; ; ; ; ; ; ; > ; ; ; ; = ! ! ! ; ; - ",
-" . + ; ; ; ~ { ; ; ; ] ^ ; ; ; = ! ! ! ! ; ; - ",
-" . + ; ; { / ( _ : < [ } | 1 2 3 4 5 6 7 8 9 0 - ",
-" . + a b ( c | d e } f g h | i j k # * l m n 7 - ",
-" o p q < / ( c r s t u v w u x i j ' y z A B C - ",
-" o D / x r E F G H I u J K L v { M N ) O P Q R S - ",
-" { / _ T U V W I I X Y Z ` ...+.@.#.$.O ! l %.&.- ",
-" _ D *.=.-.;.>.( { ,.*.'.).!.E ~.{.].^.& /.(.l _.- ",
-" _ ( } :.J [ c <.[.}.|.| 1.!.E 2.3.w 4.5.6./.7.(.8.- ",
-" _ c ( 9.0.s c o }.a.b.c.d.!.E e.+.G f.g.h.i.j.z k.l.- ",
-"_ c | m.G n.d.o o.p.q.r.s.>.f.{.+.2.'.t.u u.v.z 7.Q w.- ",
-"_ d.d g.x.} _ y.b.z.A.B.r f.{.+.f.Z C.D.c o E.F.F.k.8.- ",
-"G.d.H.I.J.K.o L.z.M.N.r f.=.O.P.'.g | x Q.R.S.k.k.Q w.- ",
-" / ;.T.U.I.V.W.X.Y.r 2.w 9.F Z.K D.D `. +.+++@+#+#+8.- ",
-" ( u W $+` %+&+>.D.J.*+O.F =+; -+c ,. +;+>+,+l %.%.m - ",
-" ( W $+'+)+..>.E J.w :.U !+~+; h ( {+;+]+,+^+A #+/+_.- ",
-"(+t.Y '+V _+:+x.{.9.U <+[+}+; x.T -.|+1+2+^+3+3+/+/+4+- ",
-" c x.J...5+2.6+O.7+f.8+` 9+e.'.0+m._ a+b+c+3+l.w.8._.- ",
-" d.J g.*+6+9.<+E d+C.K.r t.t.D./ ,.e+f+g+l.w.m 4+4+- ",
-" < _ W F h+:.0.f | D ,.i+b _ ,.j+k+l+m+8.m R n+R - ",
-" ,.o+[ e.5+p+r D `.q+q+j+r+s+t+u+v+w+m x+x+n+x+- ",
-" y+z+A+( v B+( C+{+R.D+E+F+G+u+H+I+_.x+x+x+n+B - ",
-" J+K+L+M+o u.o N+.+O+P+Q+R+S+l+T+U+4+R n+n+n+B - ",
-" V+W+X+Y+Z+;+N+`+ @.@+@m @@#@$@_._.4+R x+B B B - ",
-" %@&@*@=@-@;@>@,@'@)@- - - - - - - - - - - - - - ",
-" ",
-" "};
+++ /dev/null
-/* XPM */
-static const char * update_document_xpm[] = {
-"34 34 102 2",
-" c None",
-". c #BCBCBC",
-"+ c #F7F7F7",
-"@ c #F3F3F3",
-"# c #F1F1F1",
-"$ c #EFEFEF",
-"% c #ECECEC",
-"& c #EAEAEA",
-"* c #E9E9E9",
-"= c #C2C2C2",
-"- c #808080",
-"; c #FFFFFF",
-"> c #FEFEFE",
-", c #FBFBFB",
-"' c #F2F2F2",
-") c #EEEEEE",
-"! c #B2B2B2",
-"~ c #E3E3E3",
-"{ c #B1B1B1",
-"] c #BDBDBD",
-"^ c #C0C0C0",
-"/ c #B6B6B6",
-"( c #AFAFAF",
-"_ c #A2A2A2",
-": c #8E8E8E",
-"< c #828282",
-"[ c #EDEDED",
-"} c #E2E2E2",
-"| c #DBDBDB",
-"1 c #D0D0D0",
-"2 c #C4C4C4",
-"3 c #FAFAFA",
-"4 c #F4F4F4",
-"5 c #D8D8D8",
-"6 c #C9C9C9",
-"7 c #B5B5B5",
-"8 c #E6E6E6",
-"9 c #DCDCDC",
-"0 c #DADADA",
-"a c #CCCCCC",
-"b c #BEBEBE",
-"c c #ADADAD",
-"d c #A8A8A8",
-"e c #EBEBEB",
-"f c #DFDFDF",
-"g c #D7D7D7",
-"h c #D5D5D5",
-"i c #C6C6C6",
-"j c #F9F9F9",
-"k c #F6F6F6",
-"l c #E7E7E7",
-"m c #CECECE",
-"n c #AEAEAE",
-"o c #ABABAB",
-"p c #AAAAAA",
-"q c #A4A4A4",
-"r c #9F9F9F",
-"s c #D1D1D1",
-"t c #F8F8F8",
-"u c #E0E0E0",
-"v c #DEDEDE",
-"w c #D3D3D3",
-"x c #A6A6A6",
-"y c #A5A5A5",
-"z c #D2D2D2",
-"A c #F5F5F5",
-"B c #A1A1A1",
-"C c #CBCBCB",
-"D c #C8C8C8",
-"E c #9D9D9D",
-"F c #ACACAC",
-"G c #E5E5E5",
-"H c #E4E4E4",
-"I c #9C9C9C",
-"J c #DDDDDD",
-"K c #A3A3A3",
-"L c #E1E1E1",
-"M c #9A9A9A",
-"N c #A7A7A7",
-"O c #A0A0A0",
-"P c #9E9E9E",
-"Q c #9B9B9B",
-"R c #989898",
-"S c #D4D4D4",
-"T c #CDCDCD",
-"U c #F0F0F0",
-"V c #E8E8E8",
-"W c #D6D6D6",
-"X c #B9B9B9",
-"Y c #969696",
-"Z c #959595",
-"` c #939393",
-" . c #B3B3B3",
-".. c #999999",
-"+. c #919191",
-"@. c #CACACA",
-"#. c #CFCFCF",
-"$. c #A9A9A9",
-"%. c #8C8C8C",
-"&. c #888888",
-"*. c #848484",
-"=. c #818181",
-" . . . . . . . . . . . . . . . . ",
-" . + + + + + + + + @ # $ % & * = - ",
-" . + ; ; ; ; ; ; ; ; > ; , ' ) = ; - ",
-" . + ; ; ; ; ; ; ; ; > ; ; , ' = ; ; - ",
-" . + ; ! ! ! ; ; ; ; > ; ; ; , = ~ ; ; - ",
-" . + ; ; ; ; ; ; ; ; > ; ; ; ; = ~ ~ ; ; - ",
-" . + ; ! ! ! ! ! ! ! { ! ! ; ; = ~ ~ ~ ; ; - ",
-" . + ; ; ; ; ; ; ; ; > ; ; ; ; = ~ ~ ~ ~ ; ; - ",
-" . + ; ! ! ! ! ! ! ! { ! ! ; ; ] ^ . / ( _ : < - ",
-" . + ; ; ; ; ; ; ; ; > ; ; ; ; , [ } * | 1 2 ( - ",
-" . + ; ! ! ! ! ! ! ! ! ! ! ; ; ; 3 4 ~ ~ 5 6 7 - ",
-" . + ; ; ; ; ; ; ; ; ; ; ; ; ; 3 3 ' 8 9 0 a b - ",
-" . + ; ! ! ! ! ! ! ! ! ! ! ! ( c d d e f g h i - ",
-" . + ; ; ; ; ; ; ; ; ; ; ; , j k $ $ [ l | 0 m - ",
-" . + ; ! ! ! ! ! ! ! ! ! n c o p d q q r } 5 s - ",
-" . + ; ; ; ; ; ; ; ; ; 3 t k 4 # $ * * l u v w - ",
-" . + ; ! ! ! ! ! ! ! n c o p d x y q r r } 9 z - ",
-" . + ; ; ; ; ; ; > 3 t A @ ' $ [ e * } } u 0 s - ",
-" . + ; ! ! ! ! { c c o @ d x y q _ B r f f 9 z - ",
-" . + ; ; ; ; , 3 + k @ # x C C 6 D i E 9 9 0 s - ",
-" . + ; ! ! ( n F o p d $ q e * G H } I J g g 1 - ",
-" . + ; ; , j t A @ # ) % K * G H L f M | h h m - ",
-" . + ; ( c F o d N x q & B O P E Q M R 5 g S T - ",
-" . + ; j k 4 ' U ) e * V H ~ L v J | 5 W S S m - ",
-" X + 3 o p d N y q _ B r E E M M R Y Z ` z s T - ",
-" 7 + t 4 # $ [ e * l 8 } L v 9 | 5 W w z 1 T a - ",
-" .+ A d x y q _ B O E I M ..R Y Z ` +.+.a @.C - ",
-" ( + @ $ [ e * l H ~ u v 9 0 g h w s 1 C C @.6 - ",
-" F + # y e _ B H } u J 9 0 g h w 1 #.C C C @.6 - ",
-" F + ) e * l H ~ } u 9 | 5 S S s s T a @.@.@.6 - ",
-" $.+ V 8 ~ L f 9 0 5 W S S z 1 #.m T a C 6 6 6 - ",
-" $.x _ E M Y +.%.&.*.=.- - - - - - - - - - - - - ",
-" ",
-" "};
+++ /dev/null
-/* XPM */
-static const char * update_info_xpm[] = {
-"34 34 271 2",
-" c None",
-". c #BCBCBC",
-"+ c #F7F7F7",
-"@ c #F3F3F3",
-"# c #F1F1F1",
-"$ c #EFEFEF",
-"% c #ECECEC",
-"& c #EAEAEA",
-"* c #E9E9E9",
-"= c #C2C2C2",
-"- c #808080",
-"; c #FFFFFF",
-"> c #FEFEFE",
-", c #FBFBFB",
-"' c #F2F2F2",
-") c #EEEEEE",
-"! c #E3E3E3",
-"~ c #BDBDBD",
-"{ c #C0C0C0",
-"] c #BBBBBB",
-"^ c #B6B6B6",
-"/ c #AFAFAF",
-"( c #A2A2A2",
-"_ c #8E8E8E",
-": c #828282",
-"< c #FCFCFC",
-"[ c #F8F8F8",
-"} c #DBDBDB",
-"| c #D0D0D0",
-"1 c #C4C4C4",
-"2 c #F0F1F4",
-"3 c #D5DAE9",
-"4 c #B2BFD9",
-"5 c #9DACCF",
-"6 c #E8E8E8",
-"7 c #E2E2E2",
-"8 c #D8D8D8",
-"9 c #C9C9C9",
-"0 c #B5B5B5",
-"a c #F7F8FA",
-"b c #C8D0E2",
-"c c #8FA9DA",
-"d c #789ED7",
-"e c #87AFDF",
-"f c #98BCE4",
-"g c #8CA7D8",
-"h c #C2CBDC",
-"i c #E7E8EA",
-"j c #EBEBEB",
-"k c #E4E4E4",
-"l c #DADADA",
-"m c #CCCCCC",
-"n c #BEBEBE",
-"o c #ADBFE1",
-"p c #85A9DB",
-"q c #97BBE4",
-"r c #AFC6E8",
-"s c #B0C7E9",
-"t c #AEC5E7",
-"u c #A8C2E5",
-"v c #92B0E1",
-"w c #7F9DD7",
-"x c #A5B4D4",
-"y c #DDDFE1",
-"z c #D5D5D5",
-"A c #C6C6C6",
-"B c #F7F8FB",
-"C c #AFC0E3",
-"D c #87ABDC",
-"E c #A2BCE3",
-"F c #A5BEE4",
-"G c #9EBDE3",
-"H c #9AB8E1",
-"I c #99B9E0",
-"J c #92B3E1",
-"K c #91B1E0",
-"L c #78A2D6",
-"M c #A2B6D6",
-"N c #E0E1E3",
-"O c #DEDEDE",
-"P c #CECECE",
-"Q c #CAD6EA",
-"R c #89ADDB",
-"S c #87AADE",
-"T c #79A2DA",
-"U c #6C9CD7",
-"V c #678FD2",
-"W c #5F8CD0",
-"X c #5886D3",
-"Y c #618CD2",
-"Z c #6890D3",
-"` c #76A1D7",
-" . c #7196D2",
-".. c #B7C0D4",
-"+. c #D1D1D1",
-"@. c #F1F3F7",
-"#. c #93B0DE",
-"$. c #6C93D6",
-"%. c #638ED4",
-"&. c #5381CE",
-"*. c #4472C5",
-"=. c #3868C1",
-"-. c #3262BB",
-";. c #FDFDFD",
-">. c #2047A9",
-",. c #325CB3",
-"'. c #3666BD",
-"). c #386DC5",
-"!. c #4678CB",
-"~. c #4A7ACC",
-"{. c #7998C9",
-"]. c #D5D7DA",
-"^. c #DCDCDC",
-"/. c #D3D3D3",
-"(. c #D4DCEC",
-"_. c #6187CC",
-":. c #4674C9",
-"<. c #3867BD",
-"[. c #2F56AE",
-"}. c #2951A2",
-"|. c #274996",
-"1. c #264895",
-"2. c #183289",
-"3. c #254492",
-"4. c #254897",
-"5. c #2A509D",
-"6. c #2D55A6",
-"7. c #4B6CB6",
-"8. c #B9BFCF",
-"9. c #D2D2D2",
-"0. c #A9B7D5",
-"a. c #3A62B5",
-"b. c #2A57AB",
-"c. c #264F9B",
-"d. c #26448F",
-"e. c #223D83",
-"f. c #203A7D",
-"g. c #1E3879",
-"h. c #1F3974",
-"i. c #122871",
-"j. c #1F3A7E",
-"k. c #214388",
-"l. c #2E4E98",
-"m. c #949EB9",
-"n. c #95A4C8",
-"o. c #203E83",
-"p. c #11276E",
-"q. c #1B346E",
-"r. c #1A336D",
-"s. c #1C376F",
-"t. c #1F3D7F",
-"u. c #808CAC",
-"v. c #8E9AB4",
-"w. c #2F55AC",
-"x. c #2D53A2",
-"y. c #183593",
-"z. c #1C3473",
-"A. c #79839D",
-"B. c #D7D7D7",
-"C. c #9CA7C0",
-"D. c #274286",
-"E. c #3261B7",
-"F. c #3464BB",
-"G. c #244376",
-"H. c #838EA3",
-"I. c #C4CAD8",
-"J. c #38538D",
-"K. c #4C7FCB",
-"L. c #4A78CB",
-"M. c #406FC5",
-"N. c #2654BB",
-"O. c #284AB7",
-"P. c #34497F",
-"Q. c #A9AFBB",
-"R. c #D4D4D4",
-"S. c #E5E7ED",
-"T. c #697C9F",
-"U. c #8CAEE1",
-"V. c #7CA5DD",
-"W. c #739BD8",
-"X. c #3C61C1",
-"Y. c #4275C9",
-"Z. c #596990",
-"`. c #C3C5CA",
-" + c #CDCDCD",
-".+ c #FAFAFA",
-"++ c #B4BDCE",
-"@+ c #4C6DB8",
-"#+ c #D3DCF0",
-"$+ c #CDDAEE",
-"%+ c #C4D6EF",
-"&+ c #BBD3EC",
-"*+ c #8FA3D6",
-"=+ c #859DD4",
-"-+ c #7C97CF",
-";+ c #6F8BD0",
-">+ c #7DA8DE",
-",+ c #3D5591",
-"'+ c #9CA4B5",
-")+ c #B9B9B9",
-"!+ c #F4F4F4",
-"~+ c #E7E9ED",
-"{+ c #919EB6",
-"]+ c #4772BF",
-"^+ c #CDDAEF",
-"/+ c #EDF3F8",
-"(+ c #EAF2F9",
-"_+ c #E7EEF8",
-":+ c #E5EBF6",
-"<+ c #E0E9F5",
-"[+ c #DBE6F4",
-"}+ c #D6E1F1",
-"|+ c #92B3E0",
-"1+ c #39589E",
-"2+ c #818DA6",
-"3+ c #CACBCF",
-"4+ c #F5F5F5",
-"5+ c #DADDE5",
-"6+ c #8F9CB7",
-"7+ c #618BCF",
-"8+ c #B4C8E8",
-"9+ c #F7F8FC",
-"0+ c #F1F4FA",
-"a+ c #F1F2FA",
-"b+ c #F2F6FB",
-"c+ c #DFE8F4",
-"d+ c #9EBDE2",
-"e+ c #4D75BF",
-"f+ c #8290A9",
-"g+ c #C1C4CB",
-"h+ c #CACACA",
-"i+ c #B3B3B3",
-"j+ c #EDEDED",
-"k+ c #E0E2E6",
-"l+ c #ACB4C8",
-"m+ c #6A85BA",
-"n+ c #658ED2",
-"o+ c #7BA5D9",
-"p+ c #A5C0E6",
-"q+ c #729FD7",
-"r+ c #628BCF",
-"s+ c #647CB2",
-"t+ c #9EA6BA",
-"u+ c #C9CBCF",
-"v+ c #CBCBCB",
-"w+ c #E7E7E7",
-"x+ c #D0D3D9",
-"y+ c #B3BCCE",
-"z+ c #8E9EC1",
-"A+ c #7F8BAD",
-"B+ c #7E8AAC",
-"C+ c #8A9BBD",
-"D+ c #ABB3C6",
-"E+ c #C2C6CC",
-"F+ c #CFCFCF",
-"G+ c #ACACAC",
-"H+ c #E0E0E0",
-"I+ c #A9A9A9",
-"J+ c #E6E6E6",
-"K+ c #E1E1E1",
-"L+ c #DFDFDF",
-"M+ c #D6D6D6",
-"N+ c #A6A6A6",
-"O+ c #9D9D9D",
-"P+ c #9A9A9A",
-"Q+ c #969696",
-"R+ c #919191",
-"S+ c #8C8C8C",
-"T+ c #888888",
-"U+ c #848484",
-"V+ c #818181",
-" ",
-" . . . . . . . . . . . . . . . . ",
-" . + + + + + + + + @ # $ % & * = - ",
-" . + ; ; ; ; ; ; ; ; > ; , ' ) = ; - ",
-" . + ; ; ; ; ; ; ; ; > ; ; , ' = ; ; - ",
-" . + ; ; ; ; ; ; ; ; > ; ; ; , = ! ; ; - ",
-" . + ; ; ; ; ; ; ; ; > ; ; ; ; = ! ! ; ; - ",
-" . + ; ; ; ; ; ; ; ; > ; ; ; ; = ! ! ! ; ; - ",
-" . + ; ; ; ; ; ; ; ; > ; ; ; ; = ! ! ! ! ; ; - ",
-" . + ; ; ; ; ; ; ; ; > ; ; ; ; ~ { ] ^ / ( _ : - ",
-" . + ; ; ; ; ; ; ; ; > ; ; ; ; < [ # * } | 1 / - ",
-" . + ; ; ; ; ; < 2 3 4 5 5 4 3 2 [ ' 6 7 8 9 0 - ",
-" . + ; ; ; ; a b c d e f f e d g h i j k l m n - ",
-" . + ; ; ; 2 o p q r s s r t u v w x y ! } z A - ",
-" . + ; ; B C D E F G H I J K J I J L M N O } P - ",
-" . + ; < Q R K S T U V W X X Y Z U ` ...O O +.- ",
-" . + ; @.#.$.%.&.*.=.-.;.;.>.,.'.).!.~.{.].^./.- ",
-" . + ; (._.:.<.[.}.|.1.;.;.2.3.4.5.6.,.7.8.l 9.- ",
-" . + ; 0.a.b.c.d.e.f.g.h.i.i.h.g.j.k.3.l.m.^.+.- ",
-" . + ; n.c.c.d.k.o.f.;.;.;.p.q.r.s.h.f.t.u.l 9.- ",
-" . + ; v.k.w.b.x.}.}.5.;.< y.4.4.1.3.d.z.A.B.+.- ",
-" . + ; C.D.E.F.F.-.E.,.< < >.[.b.6.6.}.G.H.z | - ",
-" . + ; I.J.=.K.L.:.*.M.< < N.O.=.<.'.6.P.Q.R.P - ",
-" . + ; S.T.*.K U.V.W.< < < < X.K.L.Y.}.Z.`.R. +- ",
-" . + .+@ ++@+u #+$+%+&+*+=+-+;+>+W.*.,+'+| +.P - ",
-" )++ [ !+~+{+]+^+/+(+_+:+<+[+}+$+|+1+2+3+| + +- ",
-" 0 + 4+# $ 5+6+7+8+_+9+0+a+b+c+d+e+f+g+| m h+m - ",
-" i++ @ $ j+j k+l+m+n+o+p+p+q+r+s+t+u+| v+v+h+v+- ",
-" / + # j+j * w+7 x+y+z+A+B+C+D+E+P F+v+v+v+h+9 - ",
-" G++ ) j * w+k ! 7 H+^.} 8 R.R.+.+. +m h+h+h+9 - ",
-" I++ 6 J+! K+L+^.l 8 M+R.R.9.| F+P +m v+9 9 9 - ",
-" I+N+( O+P+Q+R+S+T+U+V+- - - - - - - - - - - - - ",
-" ",
-" "};
+++ /dev/null
-/* XPM */
-static const char * update_source_xpm[] = {
-"34 34 143 2",
-" c None",
-". c #BCBCBC",
-"+ c #F7F7F7",
-"@ c #F3F3F3",
-"# c #F1F1F1",
-"$ c #EFEFEF",
-"% c #ECECEC",
-"& c #EAEAEA",
-"* c #E9E9E9",
-"= c #C2C2C2",
-"- c #808080",
-"; c #FFFFFF",
-"> c #003377",
-", c #CEDBEB",
-"' c #FBFBFB",
-") c #F2F2F2",
-"! c #EEEEEE",
-"~ c #BFD0E5",
-"{ c #E3E3E3",
-"] c #FEFEFE",
-"^ c #004F33",
-"/ c #BDCEE4",
-"( c #C2E1CF",
-"_ c #CCE6D7",
-": c #B6DBC5",
-"< c #BDBDBD",
-"[ c #C0C0C0",
-"} c #B6B6B6",
-"| c #AFAFAF",
-"1 c #A2A2A2",
-"2 c #8E8E8E",
-"3 c #828282",
-"4 c #008437",
-"5 c #EDEDED",
-"6 c #E2E2E2",
-"7 c #DBDBDB",
-"8 c #D0D0D0",
-"9 c #C4C4C4",
-"0 c #BCDDCA",
-"a c #B9DBC7",
-"b c #CEE4D7",
-"c c #FAFAFA",
-"d c #F4F4F4",
-"e c #D8D8D8",
-"f c #C9C9C9",
-"g c #B5B5B5",
-"h c #C5E0D0",
-"i c #B7D8C5",
-"j c #E6E6E6",
-"k c #DCDCDC",
-"l c #DADADA",
-"m c #CCCCCC",
-"n c #BEBEBE",
-"o c #BCDDC9",
-"p c #C6E0D1",
-"q c #F9F9F9",
-"r c #EBEBEB",
-"s c #DFDFDF",
-"t c #D7D7D7",
-"u c #D5D5D5",
-"v c #C6C6C6",
-"w c #F6F6F6",
-"x c #E7E7E7",
-"y c #CECECE",
-"z c #767676",
-"A c #8B8B8B",
-"B c #9F9F9F",
-"C c #B3B3B3",
-"D c #C7C7C7",
-"E c #9E9E9E",
-"F c #898989",
-"G c #616161",
-"H c #4C4C4C",
-"I c #383838",
-"J c #E4E4E4",
-"K c #D1D1D1",
-"L c #8D8D8D",
-"M c #9A9A9A",
-"N c #ACACAC",
-"O c #888888",
-"P c #777777",
-"Q c #676767",
-"R c #585858",
-"S c #A5A5A5",
-"T c #E0E0E0",
-"U c #DEDEDE",
-"V c #D3D3D3",
-"W c #E5E5E5",
-"X c #D2D2D2",
-"Y c #000000",
-"Z c #8C8C8C",
-"` c #BFBFBF",
-" . c #D6D6D6",
-".. c #565656",
-"+. c #454545",
-"@. c #989898",
-"#. c #737373",
-"$. c #9B9B9B",
-"%. c #656565",
-"&. c #4B4B4B",
-"*. c #848484",
-"=. c #DDDDDD",
-"-. c #F8F8F8",
-";. c #F5F5F5",
-">. c #E1E1E1",
-",. c #F0F0F0",
-"'. c #080808",
-"). c #D4D4D4",
-"!. c #CDCDCD",
-"~. c #272727",
-"{. c #1E1E1E",
-"]. c #2D2D2D",
-"^. c #232323",
-"/. c #D9D9D9",
-"(. c #343434",
-"_. c #B9B9B9",
-":. c #555555",
-"<. c #E8E8E8",
-"[. c #444444",
-"}. c #535353",
-"|. c #7A7A7A",
-"1. c #6E6E6E",
-"2. c #626262",
-"3. c #6A6A6A",
-"4. c #606060",
-"5. c #595959",
-"6. c #636363",
-"7. c #CACACA",
-"8. c #CBCBCB",
-"9. c #747474",
-"0. c #727272",
-"a. c #707070",
-"b. c #6B6B6B",
-"c. c #686868",
-"d. c #7B7B7B",
-"e. c #CFCFCF",
-"f. c #929292",
-"g. c #A9A9A9",
-"h. c #A6A6A6",
-"i. c #9D9D9D",
-"j. c #969696",
-"k. c #919191",
-"l. c #818181",
-" . . . . . . . . . . . . . . . . ",
-" . + + + + + + + + @ # $ % & * = - ",
-" . + ; ; ; ; ; ; ; > , ; ' ) ! = ; - ",
-" . + ; ; ; ; ; ; ; > ~ ; ; ' ) = ; ; - ",
-" . + ; ; ; ; ; ; ; > ~ ; ; ; ' = { ; ; - ",
-" . + ; ; ; ; ; ; ; ; ] ; ; ; ; = { { ; ; - ",
-" . + ; ; ; ^ ^ ; ; > / ; ; ; ; = { { { ; ; - ",
-" . + ; ; ^ ( _ ^ ; ; ] ; ; ; ; = { { { { ; ; - ",
-" . + ; ; : ; ; ^ ; ; ] ; ; ; ; < [ . } | 1 2 3 - ",
-" . + ; ; ; ; ^ : ; ; 4 4 ; ; ; ' 5 6 * 7 8 9 | - ",
-" . + ; ; ; ; 0 ; ; 4 a b 4 ; 4 ; c d { { e f g - ",
-" . + ; ; ; ^ ; ; ; 4 ; ; h ; i c c ) j k l m n - ",
-" . + ; ; ; o ; ; ; p 4 ; ; ; ' q ) ) r s t u v - ",
-" . + ; ; ; ; ; ; ; ; ; ; ; ' q w $ $ 5 x 7 l y - ",
-" . + z A B C D k D C E F z G H I ) r r J 6 e K - ",
-" . + ; f L M N < N M O P Q R S # $ * * x T U V - ",
-" . + z F E C D k D C E F z G H I 5 r W W 6 k X - ",
-" . + z F E C Y Z S ` .; z G H I r * 6 6 T l K - ",
-" . + z F E C D Y ` .; F z G H I * x J s s k X - ",
-" . + V P O M N < Y ; O P Q ..+.@.x J 6 k k l K - ",
-" . + ; g #.- 2 $.2 - #.%.R &.*.W J 6 T =.t t 8 - ",
-" . + ; ; ' q -.;.@ # ! % & * W J >.s =.7 u u y - ",
-" . + ; ' q Y Y Y ,.'.% Y Y Y { >.s =.7 e t ).!.- ",
-" . + ; q w ~.j {.! ].* ^./.(.>.U =.7 e .).).y - ",
-" _.+ c w d :.7 +.r +.<.[.8 }.U =.7 e .V X K !.- ",
-" g + -.d # |.1.2.* 3.j 4.5.6.k 7 e .V X 8 !.m - ",
-" C + ;.# $ 5 r * x j 6 T U k 7 t .V K 8 m 7.8.- ",
-" | + @ $ 5 9.* 0.a.1.T b.k c.t u V K 8 8.8.7.f - ",
-" N + # 5 r A x O ).*.=.- l d.u V 8 e.8.8.8.7.f - ",
-" N + ! r * 1 J $.8 @.k f.e L ).K K !.m 7.7.7.f - ",
-" g.+ <.j { >.s k l e .).).X 8 e.y !.m 8.f f f - ",
-" g.h.1 i.M j.k.Z O *.l.- - - - - - - - - - - - - ",
-" ",
-" "};
+++ /dev/null
-/* XPM */
-static const char * video_xpm[] = {
-"16 16 124 2",
-" c None",
-". c #FFFFFF",
-"+ c #1B4260",
-"@ c #1E4869",
-"# c #1E4B6D",
-"$ c #1E4A6B",
-"% c #204F73",
-"& c #215175",
-"* c #325C7C",
-"= c #37607E",
-"- c #255B84",
-"; c #296491",
-"> c #4D7CA0",
-", c #6A90AB",
-"' c #7697B0",
-") c #235174",
-"! c #2C6894",
-"~ c #3375A7",
-"{ c #3677A8",
-"] c #4E8BBA",
-"^ c #81ADCE",
-"/ c #AFCBE0",
-"( c #C7DAE9",
-"_ c #42759D",
-": c #275478",
-"< c #326D9B",
-"[ c #3C81B7",
-"} c #447FAE",
-"| c #5390BF",
-"1 c #5994C2",
-"2 c #5C95C2",
-"3 c #92B8D6",
-"4 c #C8DBEA",
-"5 c #4D7EA4",
-"6 c #2D5B80",
-"7 c #366E9D",
-"8 c #3974A3",
-"9 c #336893",
-"0 c #3D7DB0",
-"a c #5592C3",
-"b c #5792C3",
-"c c #89B3D5",
-"d c #B4CFE4",
-"e c #CADDEC",
-"f c #4A7DA6",
-"g c #3E6688",
-"h c #42749D",
-"i c #BDBDBD",
-"j c #326088",
-"k c #4380B5",
-"l c #396D99",
-"m c #6C9FCA",
-"n c #8CB6D8",
-"o c #99BDDD",
-"p c #6EA2CE",
-"q c #3C74A4",
-"r c #446B8C",
-"s c #000000",
-"t c #5F5F5F",
-"u c #969696",
-"v c #959595",
-"w c #447AA5",
-"x c #3D6B94",
-"y c #6198C9",
-"z c #6BA1D1",
-"A c #639CCE",
-"B c #4E8FC8",
-"C c #4279A9",
-"D c #424242",
-"E c #7F7F7F",
-"F c #606060",
-"G c #636363",
-"H c #484848",
-"I c #1E1E1E",
-"J c #7A7A7A",
-"K c #5C80A2",
-"L c #6594C1",
-"M c #70A5D6",
-"N c #6FA3D4",
-"O c #5E8AB4",
-"P c #8C8C8C",
-"Q c #383838",
-"R c #3D3D3D",
-"S c #5D5D5D",
-"T c #B8B8B8",
-"U c #6A6A6A",
-"V c #4C4C4C",
-"W c #171717",
-"X c #94BCE2",
-"Y c #205B07",
-"Z c #1F5A06",
-"` c #2A2A2A",
-" . c #4E4E4E",
-".. c #4B4B4B",
-"+. c #585858",
-"@. c #727272",
-"#. c #454545",
-"$. c #050505",
-"%. c #2B2B2B",
-"&. c #121212",
-"*. c #36960D",
-"=. c #318A0C",
-"-. c #246608",
-";. c #363636",
-">. c #323232",
-",. c #4D4D4D",
-"'. c #3E3E3E",
-"). c #1B1B1B",
-"!. c #154700",
-"~. c #236308",
-"{. c #2B780A",
-"]. c #31840E",
-"^. c #3E7326",
-"/. c #468A29",
-"(. c #0B0B0B",
-"_. c #040404",
-":. c #517D3E",
-"<. c #328E0B",
-"[. c #389013",
-"}. c #3E9A17",
-"|. c #2F840B",
-"1. c #308C09",
-"2. c #FDFDFD",
-"3. c #FBFBFB",
-". . . . . . . . . . . . . . . . ",
-". + @ # $ % & & & & * = * & & . ",
-". # - ; ; ; ; ; ; > , ' , > ; . ",
-". ) ! ~ ~ { { ~ ] ^ / ( / ^ _ . ",
-". : < [ [ } | 1 2 3 4 . 4 3 5 . ",
-". 6 7 8 . 9 0 a b c d e d c f . ",
-". g h . i . j k l m n o n p q . ",
-". r s t u v . w . x y z A B C . ",
-". s D E F G H I J . K L M N O . ",
-". s P D Q R s S T U V W X Y Z . ",
-". ` .s s ..+.@.#.$.%.&.Y *.=.. ",
-". -.Y ;.>.V ,.'.).s !.~.{.{.].. ",
-". ^./.{.~.(._.!.~.{.].*.~.{.*.. ",
-". :.*.*.<.].].{.].[.}.|.*.1.*.. ",
-". . . . . . . . . 2.3.3.. . . . ",
-" "};
+++ /dev/null
-/*****************************************************************************
- * dialogs.cpp : wxWidgets plugin for vlc
- *****************************************************************************
- * Copyright (C) 2000-2004 the VideoLAN team
- * $Id$
- *
- * Authors: Gildas Bazin <gbazin@videolan.org>
- *
- * 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., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
- *****************************************************************************/
-
-/*****************************************************************************
- * Preamble
- *****************************************************************************/
-#include <errno.h> /* ENOMEM */
-
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include <vlc_common.h>
-#include <vlc_aout.h>
-#include <vlc_interface.h>
-
-#include "vlc_charset.h"
-
-//#include "dialogs/vlm/vlm_panel.hpp"
-#include "dialogs/bookmarks.hpp"
-#include "dialogs/wizard.hpp"
-#include "dialogs/playlist.hpp"
-#include "dialogs/open.hpp"
-#include "dialogs/updatevlc.hpp"
-#include "dialogs/fileinfo.hpp"
-#include "dialogs/iteminfo.hpp"
-#include "dialogs/preferences.hpp"
-#include "dialogs/messages.hpp"
-#include "dialogs/interaction.hpp"
-#include "interface.hpp"
-
-/* include the icon graphic */
-#include "../../../share/vlc32x32.xpm"
-
-
-/* Dialogs Provider */
-namespace wxvlc
-{
-class DialogsProvider: public wxFrame
-{
-public:
- /* Constructor */
- DialogsProvider( intf_thread_t *p_intf, wxWindow *p_parent );
- virtual ~DialogsProvider();
-
-private:
- void Open( int i_access_method, int i_arg );
-
- /* Event handlers (these functions should _not_ be virtual) */
-#ifdef UPDATE_CHECK
- void OnUpdateVLC( wxCommandEvent& event );
-#endif
- //void OnVLM( wxCommandEvent& event );
- void OnInteraction( wxCommandEvent& event );
- void OnExit( wxCommandEvent& event );
- void OnPlaylist( wxCommandEvent& event );
- void OnMessages( wxCommandEvent& event );
- void OnFileInfo( wxCommandEvent& event );
- void OnPreferences( wxCommandEvent& event );
- void OnWizardDialog( wxCommandEvent& event );
- void OnBookmarks( wxCommandEvent& event );
-
- void OnOpenFileGeneric( wxCommandEvent& event );
- void OnOpenFileSimple( wxCommandEvent& event );
- void OnOpenDirectory( wxCommandEvent& event );
- void OnOpenFile( wxCommandEvent& event );
- void OnOpenDisc( wxCommandEvent& event );
- void OnOpenNet( wxCommandEvent& event );
- void OnOpenCapture( wxCommandEvent& event );
- void OnOpenSat( wxCommandEvent& event );
-
- void OnPopupMenu( wxCommandEvent& event );
- void OnAudioPopupMenu( wxCommandEvent& event );
- void OnVideoPopupMenu( wxCommandEvent& event );
- void OnMiscPopupMenu( wxCommandEvent& event );
-
- void OnIdle( wxIdleEvent& event );
-
- void OnExitThread( wxCommandEvent& event );
-
- DECLARE_EVENT_TABLE();
-
- intf_thread_t *p_intf;
-
-public:
- /* Secondary windows */
- OpenDialog *p_open_dialog;
- wxFileDialog *p_file_dialog;
- wxDirDialog *p_dir_dialog;
- Playlist *p_playlist_dialog;
- Messages *p_messages_dialog;
- FileInfo *p_fileinfo_dialog;
- WizardDialog *p_wizard_dialog;
- wxFrame *p_prefs_dialog;
- wxFrame *p_bookmarks_dialog;
- wxFileDialog *p_file_generic_dialog;
-#ifdef UPDATE_CHECK
- UpdateVLC *p_updatevlc_dialog;
-#endif
- //VLMFrame *p_vlm_dialog;
-};
-}
-
-DEFINE_LOCAL_EVENT_TYPE( wxEVT_DIALOG );
-
-BEGIN_EVENT_TABLE(DialogsProvider, wxFrame)
- /* Idle loop used to update some of the dialogs */
- EVT_IDLE(DialogsProvider::OnIdle)
-
- /* Custom wxDialog events */
- EVT_COMMAND(INTF_DIALOG_FILE, wxEVT_DIALOG, DialogsProvider::OnOpenFile)
- EVT_COMMAND(INTF_DIALOG_DISC, wxEVT_DIALOG, DialogsProvider::OnOpenDisc)
- EVT_COMMAND(INTF_DIALOG_NET, wxEVT_DIALOG, DialogsProvider::OnOpenNet)
- EVT_COMMAND(INTF_DIALOG_CAPTURE, wxEVT_DIALOG,
- DialogsProvider::OnOpenCapture)
- EVT_COMMAND(INTF_DIALOG_FILE_SIMPLE, wxEVT_DIALOG,
- DialogsProvider::OnOpenFileSimple)
- EVT_COMMAND(INTF_DIALOG_FILE_GENERIC, wxEVT_DIALOG,
- DialogsProvider::OnOpenFileGeneric)
- EVT_COMMAND(INTF_DIALOG_DIRECTORY, wxEVT_DIALOG,
- DialogsProvider::OnOpenDirectory)
-
- EVT_COMMAND(INTF_DIALOG_PLAYLIST, wxEVT_DIALOG,
- DialogsProvider::OnPlaylist)
- EVT_COMMAND(INTF_DIALOG_MESSAGES, wxEVT_DIALOG,
- DialogsProvider::OnMessages)
- EVT_COMMAND(INTF_DIALOG_PREFS, wxEVT_DIALOG,
- DialogsProvider::OnPreferences)
- EVT_COMMAND(INTF_DIALOG_WIZARD, wxEVT_DIALOG,
- DialogsProvider::OnWizardDialog)
- EVT_COMMAND(INTF_DIALOG_FILEINFO, wxEVT_DIALOG,
- DialogsProvider::OnFileInfo)
- EVT_COMMAND(INTF_DIALOG_BOOKMARKS, wxEVT_DIALOG,
- DialogsProvider::OnBookmarks)
-
- EVT_COMMAND(INTF_DIALOG_POPUPMENU, wxEVT_DIALOG,
- DialogsProvider::OnPopupMenu)
- EVT_COMMAND(INTF_DIALOG_AUDIOPOPUPMENU, wxEVT_DIALOG,
- DialogsProvider::OnAudioPopupMenu)
- EVT_COMMAND(INTF_DIALOG_VIDEOPOPUPMENU, wxEVT_DIALOG,
- DialogsProvider::OnVideoPopupMenu)
- EVT_COMMAND(INTF_DIALOG_MISCPOPUPMENU, wxEVT_DIALOG,
- DialogsProvider::OnMiscPopupMenu)
-
- EVT_COMMAND(INTF_DIALOG_EXIT, wxEVT_DIALOG,
- DialogsProvider::OnExitThread)
-#ifdef UPDATE_CHECK
- EVT_COMMAND(INTF_DIALOG_UPDATEVLC, wxEVT_DIALOG,
- DialogsProvider::OnUpdateVLC)
-#endif
-#if 0
- EVT_COMMAND(INTF_DIALOG_VLM, wxEVT_DIALOG,
- DialogsProvider::OnVLM)
-#endif
- EVT_COMMAND( INTF_DIALOG_INTERACTION, wxEVT_DIALOG,
- DialogsProvider::OnInteraction )
-END_EVENT_TABLE()
-
-wxWindow *CreateDialogsProvider( intf_thread_t *p_intf, wxWindow *p_parent )
-{
- return new DialogsProvider( p_intf, p_parent );
-}
-
-/*****************************************************************************
- * Constructor.
- *****************************************************************************/
-DialogsProvider::DialogsProvider( intf_thread_t *_p_intf, wxWindow *p_parent )
- : wxFrame( p_parent, -1, wxT("") )
-{
- /* Initializations */
- p_intf = _p_intf;
- p_open_dialog = NULL;
- p_file_dialog = NULL;
- p_playlist_dialog = NULL;
- p_messages_dialog = NULL;
- p_fileinfo_dialog = NULL;
- p_prefs_dialog = NULL;
- p_file_generic_dialog = NULL;
- p_wizard_dialog = NULL;
- p_bookmarks_dialog = NULL;
- p_dir_dialog = NULL;
-#ifdef UPDATE_CHECK
- p_updatevlc_dialog = NULL;
-#endif
- //p_vlm_dialog = NULL;
-
- /* Give our interface a nice little icon */
- p_intf->p_sys->p_icon = new wxIcon( (const char**) vlc_xpm );
-
- /* Create the messages dialog so it can begin storing logs */
- p_messages_dialog = new Messages( p_intf, p_parent ? p_parent : this );
-
- /* Check if user wants to show the bookmarks dialog by default */
- wxCommandEvent dummy_event;
- if( config_GetInt( p_intf, "wx-bookmarks" ) )
- OnBookmarks( dummy_event );
-
- /* Intercept all menu events in our custom event handler */
- PushEventHandler( new MenuEvtHandler( p_intf, NULL ) );
-
-
- WindowSettings *ws = p_intf->p_sys->p_window_settings;
- wxPoint p;
- wxSize s;
- bool b_shown;
-
-#define INIT( id, w, N, S ) \
- if( ws->GetSettings( WindowSettings::id, b_shown, p, s ) && b_shown ) \
- { \
- if( !w ) \
- w = N; \
- w->SetSize( s ); \
- w->Move( p ); \
- w->S( true ); \
- }
-
- INIT( ID_PLAYLIST, p_playlist_dialog, new Playlist(p_intf,this), ShowPlaylist );
- INIT( ID_MESSAGES, p_messages_dialog, new Messages(p_intf,this), Show );
- INIT( ID_FILE_INFO, p_fileinfo_dialog, new FileInfo(p_intf,this), Show );
- INIT( ID_BOOKMARKS, p_bookmarks_dialog, new BookmarksDialog(p_intf,this), Show);
-#undef INIT
-}
-
-DialogsProvider::~DialogsProvider()
-{
- WindowSettings *ws = p_intf->p_sys->p_window_settings;
-
-#define UPDATE(id,w) \
- { \
- if( w && w->IsShown() && !w->IsIconized() ) \
- ws->SetSettings( WindowSettings::id, true, \
- w->GetPosition(), w->GetSize() ); \
- else \
- ws->SetSettings( WindowSettings::id, false ); \
- }
-
- UPDATE( ID_PLAYLIST, p_playlist_dialog );
- UPDATE( ID_MESSAGES, p_messages_dialog );
- UPDATE( ID_FILE_INFO, p_fileinfo_dialog );
- UPDATE( ID_BOOKMARKS, p_bookmarks_dialog );
-
-#undef UPDATE
-
- PopEventHandler(true);
-
- /* Clean up */
- delete p_open_dialog;
- if( p_prefs_dialog ) p_prefs_dialog->Destroy();
- delete p_file_dialog;
- delete p_playlist_dialog;
- delete p_messages_dialog;
- delete p_fileinfo_dialog;
- delete p_file_generic_dialog;
- delete p_wizard_dialog;
- delete p_bookmarks_dialog;
-#ifdef UPDATE_CHECK
- delete p_updatevlc_dialog;
-#endif
- //delete p_vlm_dialog;
-
-
- delete p_intf->p_sys->p_icon;
-
- /* We must set this here because on win32 this destructor will be
- * automatically called so we must not call it again on wxApp->OnExit().
- * There shouldn't be any race conditions as all this should be done
- * from the same thread. */
- p_intf->p_sys->p_wxwindow = NULL;
-}
-
-void DialogsProvider::OnIdle( wxIdleEvent& WXUNUSED(event) )
-{
- /* Update the log window */
- if( p_messages_dialog )
- p_messages_dialog->UpdateLog();
-
- /* Update the playlist */
- if( p_playlist_dialog )
- p_playlist_dialog->UpdatePlaylist();
-
- /* Update the fileinfo windows */
- if( p_fileinfo_dialog )
- p_fileinfo_dialog->Update();
-}
-
-void DialogsProvider::OnPlaylist( wxCommandEvent& WXUNUSED(event) )
-{
- /* Show/hide the playlist window */
- if( !p_playlist_dialog )
- p_playlist_dialog = new Playlist( p_intf, this );
-
- if( p_playlist_dialog )
- {
- p_playlist_dialog->ShowPlaylist( !p_playlist_dialog->IsShown() );
- }
-}
-
-void DialogsProvider::OnMessages( wxCommandEvent& WXUNUSED(event) )
-{
- /* Show/hide the log window */
- if( !p_messages_dialog )
- p_messages_dialog = new Messages( p_intf, this );
-
- if( p_messages_dialog )
- {
- p_messages_dialog->Show( !p_messages_dialog->IsShown() );
- }
-}
-
-void DialogsProvider::OnFileInfo( wxCommandEvent& WXUNUSED(event) )
-{
- /* Show/hide the file info window */
- if( !p_fileinfo_dialog )
- p_fileinfo_dialog = new FileInfo( p_intf, this );
-
- if( p_fileinfo_dialog )
- {
- p_fileinfo_dialog->Show( !p_fileinfo_dialog->IsShown() );
- }
-}
-
-void DialogsProvider::OnPreferences( wxCommandEvent& WXUNUSED(event) )
-{
- /* Show/hide the open dialog */
- if( !p_prefs_dialog )
- p_prefs_dialog = new PrefsDialog( p_intf, this );
-
- if( p_prefs_dialog )
- {
- p_prefs_dialog->Show( !p_prefs_dialog->IsShown() );
- }
-}
-
-void DialogsProvider::OnWizardDialog( wxCommandEvent& WXUNUSED(event) )
-{
- p_wizard_dialog = new WizardDialog( p_intf, this, NULL, 0, 0 );
-
- if( p_wizard_dialog )
- {
- p_wizard_dialog->Run();
- delete p_wizard_dialog;
- }
-
- p_wizard_dialog = NULL;
-}
-
-void DialogsProvider::OnBookmarks( wxCommandEvent& WXUNUSED(event) )
-{
- /* Show/hide the open dialog */
- if( !p_bookmarks_dialog )
- p_bookmarks_dialog = new BookmarksDialog( p_intf, this );
-
- if( p_bookmarks_dialog )
- {
- p_bookmarks_dialog->Show( !p_bookmarks_dialog->IsShown() );
- }
-}
-
-void DialogsProvider::OnOpenFileGeneric( wxCommandEvent& event )
-{
- intf_dialog_args_t *p_arg = (intf_dialog_args_t *)event.GetClientData();
-
- if( p_arg == NULL )
- {
- msg_Dbg( p_intf, "OnOpenFileGeneric() called with NULL arg" );
- return;
- }
-
- if( p_file_generic_dialog == NULL )
- p_file_generic_dialog = new wxFileDialog( NULL );
-
- if( p_file_generic_dialog )
- {
- p_file_generic_dialog->SetMessage( wxU(p_arg->psz_title) );
- p_file_generic_dialog->SetWildcard( wxU(p_arg->psz_extensions) );
- p_file_generic_dialog->SetWindowStyle( (p_arg->b_save ? wxSAVE : wxOPEN) |
- (p_arg->b_multiple ? wxMULTIPLE:0) );
- }
-
- if( p_file_generic_dialog &&
- p_file_generic_dialog->ShowModal() == wxID_OK )
- {
- wxArrayString paths;
-
- p_file_generic_dialog->GetPaths( paths );
-
- p_arg->i_results = paths.GetCount();
- p_arg->psz_results = (char **)malloc( p_arg->i_results *
- sizeof(char *) );
- for( size_t i = 0; i < paths.GetCount(); i++ )
- {
- p_arg->psz_results[i] = strdup( paths[i].mb_str(wxConvUTF8) );
- }
- }
-
- /* Callback */
- if( p_arg->pf_callback )
- {
- p_arg->pf_callback( p_arg );
- }
-
- if( p_arg->psz_results )
- {
- for( int i = 0; i < p_arg->i_results; i++ )
- {
- free( p_arg->psz_results[i] );
- }
- free( p_arg->psz_results );
- }
- free( p_arg->psz_title );
- free( p_arg->psz_extensions );
-
- free( p_arg );
-}
-
-void DialogsProvider::OnOpenFileSimple( wxCommandEvent& event )
-{
- playlist_t *p_playlist = pl_Hold( p_intf );
- if( p_playlist == NULL )
- {
- return;
- }
-
- if( p_file_dialog == NULL )
- p_file_dialog = new wxFileDialog( NULL, wxU(_("Open File")),
- wxT(""), wxT(""), wxT("*"), wxOPEN | wxMULTIPLE );
-
- p_file_dialog->SetWildcard(wxU(_("All Files (*.*)|*"
- "|Sound Files (*.mp3, *.ogg, etc.)|" EXTENSIONS_AUDIO
- "|Video Files (*.avi, *.mpg, etc.)|" EXTENSIONS_VIDEO
- "|Playlist Files (*.m3u, *.pls, etc.)|" EXTENSIONS_PLAYLIST
- "|Subtitle Files (*.srt, *.sub, etc.)|" EXTENSIONS_SUBTITLE)));
-
- if( p_file_dialog && p_file_dialog->ShowModal() == wxID_OK )
- {
- wxArrayString paths;
-
- p_file_dialog->GetPaths( paths );
-
- for( size_t i = 0; i < paths.GetCount(); i++ )
- {
- char *psz_utf8 = wxFromLocale( paths[i] );
- if( event.GetInt() )
- playlist_Add( p_playlist, psz_utf8, NULL,
- PLAYLIST_APPEND | (i ? 0 : PLAYLIST_GO) |
- (i ? PLAYLIST_PREPARSE : 0 ),
- PLAYLIST_END, true, false );
- else
- playlist_Add( p_playlist, psz_utf8, NULL,
- PLAYLIST_APPEND | PLAYLIST_PREPARSE , PLAYLIST_END , true, false );
- wxLocaleFree( psz_utf8 );
- }
- }
- pl_Release( p_intf );
-}
-
-void DialogsProvider::OnOpenDirectory( wxCommandEvent& event )
-{
- playlist_t *p_playlist = pl_Hold( p_intf );
- if( p_playlist == NULL )
- {
- return;
- }
-
- if( p_dir_dialog == NULL )
- p_dir_dialog = new wxDirDialog( NULL, wxU(_("Select a directory")) );
-
- if( p_dir_dialog && p_dir_dialog->ShowModal() == wxID_OK )
- {
- wxString path = p_dir_dialog->GetPath();
- char *psz_utf8 = wxFromLocale( path );
- playlist_Add( p_playlist, psz_utf8, NULL,
- PLAYLIST_APPEND | (event.GetInt() ? PLAYLIST_GO : 0),
- PLAYLIST_END, true, false );
- wxLocaleFree( psz_utf8 );
- }
- pl_Release( p_intf );
-}
-
-void DialogsProvider::OnOpenFile( wxCommandEvent& event )
-{
- Open( FILE_ACCESS, event.GetInt() );
-}
-
-void DialogsProvider::OnOpenDisc( wxCommandEvent& event )
-{
- Open( DISC_ACCESS, event.GetInt() );
-}
-
-void DialogsProvider::OnOpenNet( wxCommandEvent& event )
-{
- Open( NET_ACCESS, event.GetInt() );
-}
-
-void DialogsProvider::OnOpenCapture( wxCommandEvent& event )
-{
- Open( CAPTURE_ACCESS, event.GetInt() );
-}
-
-void DialogsProvider::Open( int i_access_method, int i_arg )
-{
- /* Show/hide the open dialog */
- if( !p_open_dialog )
- p_open_dialog = new OpenDialog( p_intf, this, i_access_method, i_arg,
- OPEN_NORMAL );
-
- if( p_open_dialog )
- {
- p_open_dialog->Show( i_access_method, i_arg );
- }
-}
-
-void DialogsProvider::OnPopupMenu( wxCommandEvent& event )
-{
- wxPoint mousepos = ScreenToClient( wxGetMousePosition() );
- ::PopupMenu( p_intf, this, mousepos );
-}
-
-void DialogsProvider::OnAudioPopupMenu( wxCommandEvent& event )
-{
- wxPoint mousepos = ScreenToClient( wxGetMousePosition() );
- ::AudioPopupMenu( p_intf, this, mousepos );
-}
-void DialogsProvider::OnVideoPopupMenu( wxCommandEvent& event )
-{
- wxPoint mousepos = ScreenToClient( wxGetMousePosition() );
- ::VideoPopupMenu( p_intf, this, mousepos );
-}
-void DialogsProvider::OnMiscPopupMenu( wxCommandEvent& event )
-{
- wxPoint mousepos = ScreenToClient( wxGetMousePosition() );
- ::MiscPopupMenu( p_intf, this, mousepos );
-}
-
-void DialogsProvider::OnExitThread( wxCommandEvent& WXUNUSED(event) )
-{
- wxTheApp->ExitMainLoop();
-}
-
-#ifdef UPDATE_CHECK
-void DialogsProvider::OnUpdateVLC( wxCommandEvent& WXUNUSED(event) )
-{
- /* Show/hide the file info window */
- if( !p_updatevlc_dialog )
- p_updatevlc_dialog = new UpdateVLC( p_intf, this );
-
- if( p_updatevlc_dialog )
- {
- p_updatevlc_dialog->Show( !p_updatevlc_dialog->IsShown() );
- }
-}
-#endif
-
-#if 0
-void DialogsProvider::OnVLM( wxCommandEvent& WXUNUSED(event) )
-{
- /* Show/hide the file info window */
- if( !p_vlm_dialog )
- p_vlm_dialog = new VLMFrame( p_intf, this );
-
- if( p_vlm_dialog )
- {
- p_vlm_dialog->Show( !p_vlm_dialog->IsShown() );
- }
-}
-#endif
-
-void DialogsProvider::OnInteraction( wxCommandEvent& event )
-{
- intf_dialog_args_t *p_arg = (intf_dialog_args_t *)event.GetClientData();
- interaction_dialog_t *p_dialog;
- InteractionDialog *p_wxdialog;
-
- return;
-
- if( p_arg == NULL )
- {
- msg_Dbg( p_intf, "OnInteraction() called with NULL arg" );
- return;
- }
- p_dialog = p_arg->p_dialog;
-
- /** \bug We store the interface object for the dialog in the p_private
- * field of the core dialog object. This is not safe if we change
- * interface while a dialog is loaded */
-
- switch( p_dialog->i_action )
- {
- case INTERACT_NEW:
- p_wxdialog = new InteractionDialog( p_intf, this, p_dialog );
- p_dialog->p_private = (void*)p_wxdialog;
- p_wxdialog->Show();
- break;
- case INTERACT_UPDATE:
- p_wxdialog = (InteractionDialog*)(p_dialog->p_private);
- if( p_wxdialog)
- p_wxdialog->Update();
- break;
- case INTERACT_HIDE:
- p_wxdialog = (InteractionDialog*)(p_dialog->p_private);
- if( p_wxdialog )
- p_wxdialog->Hide();
- p_dialog->i_status = HIDDEN_DIALOG;
- break;
- case INTERACT_DESTROY:
- p_wxdialog = (InteractionDialog*)(p_dialog->p_private);
- /// \todo
- p_dialog->i_status = DESTROYED_DIALOG;
- break;
- }
-}
+++ /dev/null
-/*****************************************************************************
- * bookmarks.cpp : wxWindows plugin for vlc
- *****************************************************************************
- * Copyright (C) 2000-2004 the VideoLAN team
- * $Id$
- *
- * Authors: Gildas Bazin <gbazin@videolan.org>
- *
- * 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., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
- *****************************************************************************/
-
-/*****************************************************************************
- * Preamble
- *****************************************************************************/
-#include "dialogs/bookmarks.hpp"
-
-#include "wizard.hpp"
-
-/* Callback prototype */
-static int PlaylistChanged( vlc_object_t *, const char *,
- vlc_value_t, vlc_value_t, void * );
-
-/*****************************************************************************
- * Event Table.
- *****************************************************************************/
-
-/* IDs for the controls and the menu commands */
-enum
-{
- /* menu items */
- ButtonAdd_Event = wxID_HIGHEST + 1,
- ButtonDel_Event,
- ButtonClear_Event,
- ButtonExtract_Event,
- ButtonEdit_Event
-};
-
-DEFINE_LOCAL_EVENT_TYPE( wxEVT_BOOKMARKS );
-
-BEGIN_EVENT_TABLE(BookmarksDialog, wxFrame)
- /* Hide the window when the user closes the window */
- EVT_CLOSE(BookmarksDialog::OnClose )
- EVT_BUTTON( wxID_ADD, BookmarksDialog::OnAdd )
- EVT_BUTTON( wxID_DELETE, BookmarksDialog::OnDel )
- EVT_BUTTON( wxID_CLEAR, BookmarksDialog::OnClear )
- EVT_BUTTON( ButtonExtract_Event, BookmarksDialog::OnExtract )
- EVT_BUTTON( ButtonEdit_Event, BookmarksDialog::OnEdit )
-
- EVT_LIST_ITEM_ACTIVATED( -1, BookmarksDialog::OnActivateItem )
-
- EVT_COMMAND( -1, wxEVT_BOOKMARKS, BookmarksDialog::OnUpdate )
-END_EVENT_TABLE()
-
-BEGIN_EVENT_TABLE( BookmarkEditDialog, wxDialog)
- EVT_BUTTON( wxID_OK, BookmarkEditDialog::OnOK)
-END_EVENT_TABLE()
-
-/****************************************************************************
- * BookmarkEditDialog
- ***************************************************************************/
-BookmarkEditDialog::BookmarkEditDialog( intf_thread_t *_p_intf,
- wxWindow *_p_parent, seekpoint_t *_p_seekpoint ):wxDialog(
- _p_parent, -1, wxU(_("Edit bookmark")), wxDefaultPosition,
- wxDefaultSize, wxDEFAULT_FRAME_STYLE )
-{
- /* Initializations */
- p_intf = _p_intf;
- p_seekpoint = _p_seekpoint;
- SetIcon( *p_intf->p_sys->p_icon );
-
- /* Create a panel to put everything in*/
- wxBoxSizer *panel_sizer = new wxBoxSizer( wxVERTICAL );
-
- wxFlexGridSizer * sizer = new wxFlexGridSizer( 2 , 3 , 1 );
- name_text = new wxTextCtrl( this, -1, wxU( p_seekpoint->psz_name ?
- p_seekpoint->psz_name : "" ),
- wxDefaultPosition, wxSize( 100, 20) );
- time_text = new wxTextCtrl( this, -1, wxString::Format(wxT("%d"),
- (int)(p_seekpoint->i_time_offset / 1000000) ),
- wxDefaultPosition, wxSize( 100, 20) );
- bytes_text = new wxTextCtrl( this, -1, wxString::Format(wxT("%d"),
- (int)p_seekpoint->i_byte_offset ),
- wxDefaultPosition, wxSize( 100, 20) );
-
- sizer->Add( new wxStaticText( this, -1, wxU(_("Name") ) ), 0, wxLEFT, 5 );
- sizer->Add( name_text, 0, wxEXPAND|wxRIGHT , 5 );
- sizer->Add( new wxStaticText( this, -1, wxU(_("Time") ) ), 0, wxLEFT, 5 );
- sizer->Add( time_text , 0, wxEXPAND|wxRIGHT , 5);
- sizer->Add( new wxStaticText( this, -1, wxU(_("Bytes") ) ), 0, wxLEFT, 5 );
- sizer->Add( bytes_text, 0, wxEXPAND|wxRIGHT, 5);
-
- wxBoxSizer *button_sizer = new wxBoxSizer( wxHORIZONTAL );
- wxButton *ok_button = new wxButton( this, wxID_OK, wxU(_("&OK") ) );
- ok_button->SetDefault();
- button_sizer->Add( ok_button );
- button_sizer->Add( new wxButton( this, wxID_CANCEL, wxU(_("&Cancel") ) ) );
-
- panel_sizer->Add( sizer, 0, wxEXPAND | wxTOP|wxBOTTOM, 5 );
- panel_sizer->Add( button_sizer, 0, wxEXPAND | wxBOTTOM, 5 );
- panel_sizer->Layout();
- SetSizerAndFit( panel_sizer );
-}
-
-BookmarkEditDialog::~BookmarkEditDialog()
-{
-}
-void BookmarkEditDialog::OnOK( wxCommandEvent &event )
-{
- free( p_seekpoint->psz_name );
- p_seekpoint->psz_name = strdup( name_text->GetValue().mb_str(wxConvUTF8) );
- p_seekpoint->i_byte_offset = atoi( bytes_text->GetValue().mb_str(wxConvUTF8) );
- p_seekpoint->i_time_offset = 1000000 *
- atoll( time_text->GetValue().mb_str(wxConvUTF8) ) ;
- EndModal( wxID_OK );
-}
-
-void BookmarkEditDialog::OnCancel( wxCommandEvent &event )
-{
- EndModal( wxID_CANCEL );
-}
-
-/*****************************************************************************
- * Constructor.
- *****************************************************************************/
-BookmarksDialog::BookmarksDialog( intf_thread_t *_p_intf, wxWindow *p_parent )
- : wxFrame( p_parent->GetParent() ? p_parent->GetParent() : p_parent,
- -1, wxU(_("Bookmarks")),
- !p_parent->GetParent() ? wxDefaultPosition :
- wxPoint( p_parent->GetParent()->GetRect().GetX(),
- p_parent->GetParent()->GetRect().GetY() +
- p_parent->GetParent()->GetRect().GetHeight() + 40 ),
- wxSize( 500, -1 ),
- wxDEFAULT_FRAME_STYLE | wxFRAME_FLOAT_ON_PARENT )
-{
- /* Initializations */
- p_intf = _p_intf;
- SetIcon( *p_intf->p_sys->p_icon );
-
- wxPanel *main_panel = new wxPanel( this, -1 );
- wxBoxSizer *main_sizer = new wxBoxSizer( wxHORIZONTAL );
-
- wxBoxSizer *sizer = new wxBoxSizer( wxHORIZONTAL );
-
- wxPanel *panel = new wxPanel( main_panel, -1 );
- wxBoxSizer *panel_sizer = new wxBoxSizer( wxVERTICAL );
- wxButton *button_add =
- new wxButton( panel, wxID_ADD, wxU(_("Add")) );
- wxButton *button_del =
- new wxButton( panel, wxID_DELETE, wxU(_("&Delete")) );
- wxButton *button_clear =
- new wxButton( panel, wxID_CLEAR, wxU(_("&Clear")) );
- wxButton *button_edit =
- new wxButton( panel, ButtonEdit_Event, wxU(_("Edit")) );
- wxButton *button_extract =
- new wxButton( panel, ButtonExtract_Event, wxU(_("Extract")) );
-
-#define ADD_TEXT N_("Adds a bookmark at the current position in the stream")
-#define REMOVE_TEXT N_("Removes the selected bookmarks")
-#define CLEAR_TEXT N_("Removes all the bookmarks for that stream")
-#define EDIT_TEXT N_("Edit the properties of a bookmark")
-#define EXTRACT_TEXT N_("If you select two or more bookmarks, this will " \
- "launch the streaming/transcoding wizard to allow you to " \
- "stream or save the part of the stream between these bookmarks")
- button_add->SetToolTip( wxU(_( ADD_TEXT ) ) );
- button_del->SetToolTip( wxU(_( REMOVE_TEXT ) ) );
- button_clear->SetToolTip( wxU(_( CLEAR_TEXT ) ) );
- button_edit->SetToolTip( wxU(_( EDIT_TEXT ) ) );
- button_extract->SetToolTip( wxU(_( EXTRACT_TEXT ) ) );
-
- panel_sizer->Add( button_add, 0, wxEXPAND );
- panel_sizer->Add( button_del, 0, wxEXPAND );
- panel_sizer->Add( button_clear, 0, wxEXPAND );
-
- panel_sizer->Add( button_edit, 0, wxEXPAND );
- panel_sizer->Add( 0, 0, 1 );
- panel_sizer->Add( button_extract, 0, wxEXPAND );
-
- panel->SetSizerAndFit( panel_sizer );
-
- list_ctrl = new wxListView( main_panel, -1,
- wxDefaultPosition, wxDefaultSize,
- wxLC_REPORT | wxSUNKEN_BORDER );
- list_ctrl->InsertColumn( 0, wxU(_("Description")) );
- list_ctrl->SetColumnWidth( 0, 240 );
- list_ctrl->InsertColumn( 1, wxU(_("Bytes")) );
- list_ctrl->InsertColumn( 2, wxU(_("Time")) );
-
- sizer->Add( panel, 0, wxEXPAND | wxALL, 1 );
- sizer->Add( list_ctrl, 1, wxEXPAND | wxALL, 1 );
- main_panel->SetSizer( sizer );
-
- main_sizer->Add( main_panel, 1, wxEXPAND );
- SetSizer( main_sizer );
-
- playlist_t *p_playlist = pl_Hold( p_intf );
- if( p_playlist )
- {
- /* Some global changes happened -> Rebuild all */
- var_AddCallback( p_playlist, "playlist-current",
- PlaylistChanged, this );
- pl_Release( p_intf );
- }
-}
-
-BookmarksDialog::~BookmarksDialog()
-{
- playlist_t *p_playlist = pl_Hold( p_intf );
- if( p_playlist )
- {
- var_DelCallback( p_playlist, "playlist-current",
- PlaylistChanged, this );
- pl_Release( p_intf );
- }
-}
-
-/*****************************************************************************
- * Private methods.
- *****************************************************************************/
-//wxFrame *BookmarksDialog( intf_thread_t *p_intf, wxWindow *p_parent )
-//{
-// return new class BookmarksDialog( p_intf, p_parent );
-//}
-
-void BookmarksDialog::Update()
-{
- input_thread_t *p_input =
- (input_thread_t *)vlc_object_find( p_intf, VLC_OBJECT_INPUT,
- FIND_ANYWHERE );
- if( !p_input ) return;
-
- seekpoint_t **pp_bookmarks;
- int i_bookmarks;
-
- list_ctrl->DeleteAllItems();
- if( input_Control( p_input, INPUT_GET_BOOKMARKS, &pp_bookmarks,
- &i_bookmarks ) != VLC_SUCCESS )
- {
- vlc_object_release( p_input );
- return;
- }
-
- for( int i = 0; i < i_bookmarks; i++ )
- {
- list_ctrl->InsertItem( i, wxL2U( pp_bookmarks[i]->psz_name ) );
- /* FIXME: see if we can use the 64 bits integer format string */
- list_ctrl->SetItem( i, 1, wxString::Format(wxT("%d"),
- (int)(pp_bookmarks[i]->i_byte_offset) ) );
- list_ctrl->SetItem( i, 2, wxString::Format(wxT("%d"),
- (int)(pp_bookmarks[i]->i_time_offset / 1000000) ) );
- }
-
- vlc_object_release( p_input );
-}
-
-bool BookmarksDialog::Show( bool show )
-{
- Update();
- return wxFrame::Show( show );
-}
-
-void BookmarksDialog::OnClose( wxCloseEvent& event )
-{
- Hide();
-}
-
-void BookmarksDialog::OnAdd( wxCommandEvent& event )
-{
- input_thread_t *p_input =
- (input_thread_t *)vlc_object_find( p_intf, VLC_OBJECT_INPUT,
- FIND_ANYWHERE );
- if( !p_input ) return;
-
- seekpoint_t bookmark;
-
- if( !input_Control( p_input, INPUT_GET_BOOKMARK, &bookmark ) )
- {
- bookmark.psz_name = NULL;
- input_Control( p_input, INPUT_ADD_BOOKMARK, &bookmark );
- }
- vlc_object_release( p_input );
-
- Update();
-}
-
-void BookmarksDialog::OnDel( wxCommandEvent& event )
-{
- input_thread_t *p_input =
- (input_thread_t *)vlc_object_find( p_intf, VLC_OBJECT_INPUT,
- FIND_ANYWHERE );
- if( !p_input ) return;
-
- int i_focused = list_ctrl->GetFocusedItem();
- if( i_focused >= 0 )
- {
- input_Control( p_input, INPUT_DEL_BOOKMARK, i_focused );
- }
-
- vlc_object_release( p_input );
-
- Update();
-}
-
-void BookmarksDialog::OnClear( wxCommandEvent& event )
-{
- input_thread_t *p_input =
- (input_thread_t *)vlc_object_find( p_intf, VLC_OBJECT_INPUT,
- FIND_ANYWHERE );
- if( !p_input ) return;
-
- input_Control( p_input, INPUT_CLEAR_BOOKMARKS );
-
- vlc_object_release( p_input );
-
- Update();
-}
-
-void BookmarksDialog::OnExtract( wxCommandEvent& event )
-{
- long i_first = list_ctrl->GetNextItem( -1, wxLIST_NEXT_ALL,
- wxLIST_STATE_SELECTED );
- long i_second = list_ctrl->GetNextItem( i_first, wxLIST_NEXT_ALL,
- wxLIST_STATE_SELECTED );
-
- if( i_first == -1 || i_second == -1 )
- {
- wxMessageBox( wxU(_("You must select two bookmarks") ),
- wxU(_("Invalid selection") ), wxICON_WARNING | wxOK,
- this );
- return;
- }
- input_thread_t *p_input =
- (input_thread_t *)vlc_object_find( p_intf, VLC_OBJECT_INPUT,
- FIND_ANYWHERE );
- if( !p_input )
- {
- wxMessageBox( wxU(_("The stream must be playing or paused for "
- "bookmarks to work" ) ), wxU(_("No input found")),
- wxICON_WARNING | wxOK,
- this );
- return;
- }
-
- seekpoint_t **pp_bookmarks;
- int i_bookmarks ;
-
- if( input_Control( p_input, INPUT_GET_BOOKMARKS, &pp_bookmarks,
- &i_bookmarks ) != VLC_SUCCESS )
- {
- vlc_object_release( p_input );
- return;
- }
-
- if( i_first < i_bookmarks && i_second <= i_bookmarks )
- {
- char *psz_uri = input_item_GetURI( input_GetItem( p_input ) );
- WizardDialog *p_wizard_dialog = new WizardDialog( p_intf, this,
- psz_uri,
- pp_bookmarks[i_first]->i_time_offset/1000000,
- pp_bookmarks[i_second]->i_time_offset/1000000 );
- free( psz_uri );
- vlc_object_release( p_input );
- if( p_wizard_dialog )
- {
- p_wizard_dialog->Run();
- delete p_wizard_dialog;
- }
- }
- else
- {
- vlc_object_release( p_input );
- }
-}
-
-void BookmarksDialog::OnActivateItem( wxListEvent& event )
-{
- input_thread_t *p_input =
- (input_thread_t *)vlc_object_find( p_intf, VLC_OBJECT_INPUT,
- FIND_ANYWHERE );
- if( !p_input ) return;
-
- input_Control( p_input, INPUT_SET_BOOKMARK, event.GetIndex() );
-
- vlc_object_release( p_input );
-}
-
-void BookmarksDialog::OnEdit( wxCommandEvent& event )
-{
- input_thread_t *p_old_input;
- input_thread_t *p_input =
- (input_thread_t *)vlc_object_find( p_intf, VLC_OBJECT_INPUT,
- FIND_ANYWHERE );
- if( !p_input ) return;
-
-
- seekpoint_t **pp_bookmarks;
- int i_bookmarks;
-
- if( input_Control( p_input, INPUT_GET_BOOKMARKS, &pp_bookmarks,
- &i_bookmarks ) != VLC_SUCCESS )
- {
- vlc_object_release( p_input );
- return;
- }
- p_old_input = p_input;
- vlc_object_release( p_input );
-
- long i_first = list_ctrl->GetNextItem( -1, wxLIST_NEXT_ALL,
- wxLIST_STATE_SELECTED );
-
- if( i_first > -1 && i_first <= i_bookmarks )
- {
- BookmarkEditDialog *p_bmk_edit;
- p_bmk_edit = new BookmarkEditDialog( p_intf, this,
- pp_bookmarks[i_first]);
-
- if( p_bmk_edit->ShowModal() == wxID_OK )
- {
- p_input =(input_thread_t *)vlc_object_find( p_intf,
- VLC_OBJECT_INPUT, FIND_ANYWHERE );
- if( !p_input )
- {
- wxMessageBox( wxU( _("No input found. The stream must be "
- "playing or paused for bookmarks to work.") ),
- wxU( _("No input") ), wxICON_WARNING | wxOK,
- this );
- return;
- }
- if( p_old_input != p_input )
- {
- wxMessageBox( wxU( _("Input has changed, unable to save "
- "bookmark. Use \"pause\" while editing "
- "bookmarks to keep the same input.") ),
- wxU( _("Input has changed ") ),
- wxICON_WARNING | wxOK, this );
- vlc_object_release( p_input );
- return;
-
- }
- if( input_Control( p_input, INPUT_CHANGE_BOOKMARK,
- p_bmk_edit->p_seekpoint, i_first ) !=
- VLC_SUCCESS )
- {
- vlc_object_release( p_input );
- return;
- }
- Update();
- vlc_object_release( p_input );
- }
- }
-}
-
-
-void BookmarksDialog::OnUpdate( wxCommandEvent &event )
-{
- Update();
-}
-
-/*****************************************************************************
- * PlaylistChanged: callback triggered by the intf-change playlist variable
- * We don't rebuild the playlist directly here because we don't want the
- * caller to block for a too long time.
- *****************************************************************************/
-static int PlaylistChanged( vlc_object_t *p_this, const char *psz_variable,
- vlc_value_t oval, vlc_value_t nval, void *param )
-{
- class BookmarksDialog *p_dialog = (class BookmarksDialog *)param;
-
- wxCommandEvent bookmarks_event( wxEVT_BOOKMARKS, 0 );
- p_dialog->AddPendingEvent( bookmarks_event );
-
- return VLC_SUCCESS;
-}
+++ /dev/null
-/*****************************************************************************
- * bookmarks.hpp: Headers for the bookmarks window
- *****************************************************************************
- * Copyright (C) 1999-2005 the VideoLAN team
- * $Id$
- *
- * Authors: Gildas Bazin <gbazin@videolan.org>
- *
- * 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., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
- *****************************************************************************/
-
-#ifndef _WXVLC_BOOKMARKS_H_
-#define _WXVLC_BOOKMARKS_H_
-
-#include "wxwidgets.hpp"
-#include <wx/listctrl.h>
-
-namespace wxvlc
-{
- class BookmarksDialog: public wxFrame
- {
- public:
- /* Constructor */
- BookmarksDialog( intf_thread_t *p_intf, wxWindow *p_parent );
- virtual ~BookmarksDialog();
-
- bool Show( bool );
-
- private:
- void Update();
-
- /* Event handlers (these functions should _not_ be virtual) */
- void OnClose( wxCloseEvent& event );
- void OnAdd( wxCommandEvent& event );
- void OnDel( wxCommandEvent& event );
- void OnClear( wxCommandEvent& event );
- void OnActivateItem( wxListEvent& event );
- void OnUpdate( wxCommandEvent &event );
- void OnEdit( wxCommandEvent& event );
- void OnExtract( wxCommandEvent& event );
-
- DECLARE_EVENT_TABLE();
-
- intf_thread_t *p_intf;
- wxWindow *p_parent;
-
- wxListView *list_ctrl;
- };
-
- class BookmarkEditDialog : public wxDialog
- {
- public:
- /* Constructor */
- BookmarkEditDialog( intf_thread_t *p_intf, wxWindow *p_parent,
- seekpoint_t *p_seekpoint );
- virtual ~BookmarkEditDialog();
- seekpoint_t *p_seekpoint;
- private:
- wxTextCtrl *name_text, *time_text, *bytes_text;
-
- void OnOK( wxCommandEvent& event);
- void OnCancel( wxCommandEvent& event);
-
- DECLARE_EVENT_TABLE();
-
- intf_thread_t *p_intf;
- };
-};
-
-#endif
+++ /dev/null
-/*****************************************************************************
- * fileinfo.cpp : wxWindows plugin for vlc
- *****************************************************************************
- * Copyright (C) 2000-2004 the VideoLAN team
- * $Id$
- *
- * Authors: Sigmund Augdal Helberg <dnumgis@videolan.org>
- *
- * 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., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
- *****************************************************************************/
-
-#include "dialogs/fileinfo.hpp"
-#include "dialogs/infopanels.hpp"
-
-/*****************************************************************************
- * Event Table.
- *****************************************************************************/
-
-static int ItemChanged( vlc_object_t *, const char *,
- vlc_value_t, vlc_value_t, void * );
-
-
-/* IDs for the controls and the menu commands */
-enum
-{
- Close_Event
-};
-
-BEGIN_EVENT_TABLE(FileInfo, wxFrame)
- /* Button events */
- EVT_BUTTON(wxID_CLOSE, FileInfo::OnButtonClose)
-
- /* Hide the window when the user closes the window */
- EVT_CLOSE(FileInfo::OnClose)
-
-END_EVENT_TABLE()
-
-/*****************************************************************************
- * Constructor.
- *****************************************************************************/
-FileInfo::FileInfo( intf_thread_t *_p_intf, wxWindow *p_parent ):
- wxFrame( p_parent, -1, wxU(_("Stream and Media Info")), wxDefaultPosition,
- wxDefaultSize, wxDEFAULT_FRAME_STYLE )
-{
- p_intf = _p_intf;
- playlist_t *p_playlist = pl_Hold( p_intf );
-
- b_stats = config_GetInt(p_intf, "stats");
- /* Initializations */
- SetIcon( *p_intf->p_sys->p_icon );
- SetAutoLayout( TRUE );
-
- /* Create a panel to put everything in */
- wxPanel *panel = new wxPanel( this, -1 );
- panel->SetAutoLayout( TRUE );
-
- wxBoxSizer *main_sizer = new wxBoxSizer( wxVERTICAL );
- panel_sizer = new wxBoxSizer( wxVERTICAL );
-
- wxNotebook *notebook = new wxNotebook( panel, -1 );
-#if (!wxCHECK_VERSION(2,5,2))
- wxNotebookSizer *notebook_sizer = new wxNotebookSizer( notebook );
-#endif
- item_info = new MetaDataPanel( p_intf, notebook, false );
- advanced_info = new AdvancedInfoPanel( p_intf, notebook );
- if( b_stats )
- stats_info = new InputStatsInfoPanel( p_intf, notebook );
-
- notebook->AddPage( item_info, wxU(_("General") ), true );
- notebook->AddPage( advanced_info, wxU(_("Advanced information") ), false );
- if( b_stats )
- notebook->AddPage( stats_info, wxU(_("Statistics") ), false );
-
-#if (!wxCHECK_VERSION(2,5,2))
- panel_sizer->Add( notebook_sizer, 1, wxEXPAND | wxALL, 5 );
-#else
- panel_sizer->Add( notebook, 1, wxEXPAND | wxALL, 5 );
-#endif
-
- panel_sizer->Add( new wxButton( panel, wxID_CLOSE, wxU(_("&Close")) ) ,
- 0, wxALL|wxALIGN_RIGHT, 5 );
-
- panel_sizer->Layout();
- panel->SetSizerAndFit( panel_sizer );
- main_sizer->Add( panel, 1, wxGROW, 0 );
- main_sizer->Layout();
- SetSizerAndFit( main_sizer );
-
- if( p_playlist )
- {
- var_AddCallback( p_playlist, "item-change", ItemChanged, this );
- pl_Release( p_intf );
- }
-
- last_update = 0L;
- b_need_update = true;
- Update();
-}
-
-void FileInfo::Update()
-{
- if( mdate() - last_update < 400000L ) return;
- last_update = mdate();
-
- playlist_t *p_playlist = pl_Hold( p_intf );
- if( !p_playlist ) return;
-
- input_thread_t *p_input = p_playlist->p_input ;
- if( !p_input || p_input->b_dead || !input_GetItem(p_input)->psz_name )
- {
- item_info->Clear();
- advanced_info->Clear();
- if( b_stats )
- stats_info->Clear();
- pl_Release( p_intf );
- return;
- }
- pl_Release( p_intf );
-
- vlc_object_hold( p_input );
- vlc_mutex_lock( &input_GetItem(p_input)->lock );
- if( b_need_update == true )
- {
- vlc_mutex_unlock( &input_GetItem(p_input)->lock );
- item_info->Update( input_GetItem(p_input) );
- vlc_mutex_lock( &input_GetItem(p_input)->lock );
- advanced_info->Update( input_GetItem(p_input) );
- }
- if( b_stats )
- stats_info->Update( input_GetItem(p_input) );
- vlc_mutex_unlock( &input_GetItem(p_input)->lock );
-
- vlc_object_release(p_input);
- pl_Release( p_intf );
- b_need_update = false;
- panel_sizer->Layout();
-
- return;
-}
-
-FileInfo::~FileInfo()
-{
-}
-
-void FileInfo::OnButtonClose( wxCommandEvent& event )
-{
- wxCloseEvent cevent;
- OnClose(cevent);
-}
-
-void FileInfo::OnClose( wxCloseEvent& WXUNUSED(event) )
-{
- Hide();
-}
-
-static int ItemChanged( vlc_object_t *p_this, const char *psz_var,
- vlc_value_t oldval, vlc_value_t newval, void *param )
-{
- FileInfo *p_fileinfo = (FileInfo *)param;
- p_fileinfo->b_need_update = true;
- return VLC_SUCCESS;
-}
+++ /dev/null
-/*****************************************************************************
- * fileinfo.hpp: private wxWindows interface description
- *****************************************************************************
- * Copyright (C) 1999-2005 the VideoLAN team
- * $Id$
- *
- * Authors: Gildas Bazin <gbazin@videolan.org>
- *
- * 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., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
- *****************************************************************************/
-
-#ifndef _WXVLC_FILEINFO_H_
-#define _WXVLC_FILEINFO_H_
-
-#include "wxwidgets.hpp"
-
-#include <wx/treectrl.h>
-#include <wx/notebook.h>
-
-namespace wxvlc
-{
- class MetaDataPanel;
- class AdvancedInfoPanel;
- class InputStatsInfoPanel;
- class FileInfo: public wxFrame
- {
- public:
- /* Constructor */
- FileInfo( intf_thread_t *p_intf, wxWindow *p_parent );
- virtual ~FileInfo();
- void Update();
-
- bool b_need_update;
-
- private:
- void OnButtonClose( wxCommandEvent& event );
- void OnClose( wxCloseEvent& WXUNUSED(event) );
-
- DECLARE_EVENT_TABLE();
-
- intf_thread_t *p_intf;
-
- mtime_t last_update;
-
- MetaDataPanel *item_info;
- AdvancedInfoPanel *advanced_info;
- InputStatsInfoPanel *stats_info;
-
- wxBoxSizer *panel_sizer;
-
- bool b_stats;
- };
-};
-
-#endif
+++ /dev/null
-/*****************************************************************************
- * infopanels.cpp : Information panels (general info, stats, ...)
- *****************************************************************************
- * Copyright (C) 2000-2004 the VideoLAN team
- * $Id$
- *
- * Authors: Clément Stenac <zorglub@videolan.org>
- *
- * 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., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
- *****************************************************************************/
-
-#include "dialogs/infopanels.hpp"
-#include <wx/combobox.h>
-#include <wx/statline.h>
-
-#include <vlc_meta.h>
-
-#ifndef wxRB_SINGLE
-# define wxRB_SINGLE 0
-#endif
-
-/*****************************************************************************
- * General info (URI, name, metadata)
- *****************************************************************************/
-BEGIN_EVENT_TABLE( MetaDataPanel, wxPanel )
-END_EVENT_TABLE()
-
-MetaDataPanel::MetaDataPanel( intf_thread_t *_p_intf,
- wxWindow* _p_parent,
- bool _b_modifiable ):
- wxPanel( _p_parent, -1 )
-{
- int flags= wxTE_PROCESS_ENTER;
- /* Initializations */
- p_intf = _p_intf;
- p_parent = _p_parent;
- b_modifiable = _b_modifiable;
-
- SetAutoLayout( TRUE );
-
- wxBoxSizer *panel_sizer = new wxBoxSizer( wxVERTICAL );
-
- wxFlexGridSizer *sizer = new wxFlexGridSizer(2,8,20);
- sizer->AddGrowableCol(1);
-
- if( !b_modifiable )
- flags |= wxTE_READONLY;
-
- /* URI Textbox */
- wxStaticText *uri_static =
- new wxStaticText( this, -1, wxU(_("URI")) );
- sizer->Add( uri_static, 0 , wxALL , 0 );
-
- uri_text = new wxTextCtrl( this, -1,
- wxU(""), wxDefaultPosition, wxSize( 300, -1 ), flags );
- sizer->Add( uri_text, 1 , wxALL|wxEXPAND , 0 );
-
- /* Name Textbox */
- wxStaticText *name_static =
- new wxStaticText( this, -1, wxU(_("Name")) );
- sizer->Add( name_static, 0 , wxALL , 0 );
-
- name_text = new wxTextCtrl( this, -1,
- wxU(""), wxDefaultPosition, wxSize( 300, -1 ), flags );
- sizer->Add( name_text, 1 , wxALL|wxEXPAND , 0 );
- sizer->Layout();
-
- /* Metadata */
- wxFlexGridSizer *meta_sizer = new wxFlexGridSizer(2,11,20);
- meta_sizer->AddGrowableCol(1);
-
-#define ADD_META( string, widget ) { \
- meta_sizer->Add( new wxStaticText( this, -1, wxU(_(string) ) ),1, \
- wxTOP|wxRIGHT|wxLEFT|wxEXPAND, 0 ); \
- widget = new wxStaticText( this, -1, wxU( "" ) ); \
- meta_sizer->Add( widget, 1, wxTOP|wxRIGHT|wxLEFT|wxEXPAND, 0 ); }
-
- ADD_META( VLC_META_ARTIST, artist_text );
- ADD_META( VLC_META_GENRE, genre_text );
- ADD_META( VLC_META_COPYRIGHT, copyright_text );
- ADD_META( VLC_META_ALBUM, collection_text );
- ADD_META( VLC_META_TRACK_NUMBER, seqnum_text );
- ADD_META( VLC_META_DESCRIPTION, description_text );
- ADD_META( VLC_META_RATING, rating_text );
- ADD_META( VLC_META_DATE, date_text );
- ADD_META( VLC_META_LANGUAGE, language_text );
- ADD_META( VLC_META_NOW_PLAYING, nowplaying_text );
- ADD_META( VLC_META_PUBLISHER, publisher_text );
- ADD_META( VLC_META_SETTING, setting_text );
-
- meta_sizer->Layout();
-
- panel_sizer->Add( sizer, 0, wxEXPAND | wxALL, 5 );
- panel_sizer->Add( meta_sizer, 0, wxEXPAND | wxALL, 5 );
- panel_sizer->Layout();
- SetSizerAndFit( panel_sizer );
-}
-
-MetaDataPanel::~MetaDataPanel()
-{
-}
-
-void MetaDataPanel::Update( input_item_t *p_item )
-{
- /* Rebuild the tree */
- Clear();
-
- char *psz_meta;
-
-#define UPDATE_META( meta, widget ) { \
- psz_meta = input_item_Get##meta( p_item ); \
- if( psz_meta != NULL && *psz_meta) \
- { \
- widget->SetLabel( wxU( psz_meta ) ); \
- } \
- else { widget->SetLabel( wxU( "-" ) ); } \
- } \
- free( psz_meta );
-
- UPDATE_META( URI, uri_text );
- UPDATE_META( Name, name_text );
- UPDATE_META( Artist, artist_text );
- UPDATE_META( Genre, genre_text );
- UPDATE_META( Copyright, copyright_text );
- UPDATE_META( Album, collection_text );
- UPDATE_META( TrackNum, seqnum_text );
- UPDATE_META( Description, description_text );
- UPDATE_META( Rating, rating_text );
- UPDATE_META( Date, date_text );
- UPDATE_META( Language, language_text );
- UPDATE_META( NowPlaying, nowplaying_text );
- UPDATE_META( Publisher, publisher_text );
- UPDATE_META( Setting, setting_text );
-
-#undef UPDATE_META
-}
-
-char* MetaDataPanel::GetURI( )
-{
- return strdup( uri_text->GetLineText(0).mb_str(wxConvUTF8) );
-}
-
-char* MetaDataPanel::GetName( )
-{
- return strdup( name_text->GetLineText(0).mb_str(wxConvUTF8) );
-}
-
-void MetaDataPanel::Clear()
-{
-}
-
-void MetaDataPanel::OnOk( )
-{
-}
-
-void MetaDataPanel::OnCancel( )
-{
-}
-
-
-/*****************************************************************************
- * General info panel
- *****************************************************************************/
-BEGIN_EVENT_TABLE( AdvancedInfoPanel, wxPanel )
-END_EVENT_TABLE()
-
-AdvancedInfoPanel::AdvancedInfoPanel( intf_thread_t *_p_intf,
- wxWindow* _p_parent ):
- wxPanel( _p_parent, -1 )
-{
- /* Initializations */
- p_intf = _p_intf;
- p_parent = _p_parent;
-
- SetAutoLayout( TRUE );
-
- wxBoxSizer *panel_sizer = new wxBoxSizer( wxVERTICAL );
-
- wxFlexGridSizer *sizer = new wxFlexGridSizer(2,8,20);
- sizer->AddGrowableCol(1);
-
- /* Treeview */
- info_tree = new wxTreeCtrl( this, -1, wxDefaultPosition,
- wxSize(220,200),
- wxSUNKEN_BORDER |wxTR_HAS_BUTTONS |
- wxTR_HIDE_ROOT );
- info_root = info_tree->AddRoot( wxU( "" ) );
-
- panel_sizer->Add( info_tree, 1, wxEXPAND | wxALL, 5 );
- panel_sizer->Layout();
- SetSizerAndFit( panel_sizer );
-}
-
-AdvancedInfoPanel::~AdvancedInfoPanel()
-{
-}
-
-void AdvancedInfoPanel::Update( input_item_t *p_item )
-{
- /* Rebuild the tree */
- Clear();
-
- for( int i = 0; i< p_item->i_categories ; i++)
- {
- wxTreeItemId cat = info_tree->AppendItem( info_root,
- wxU( p_item->pp_categories[i]->psz_name) );
-
- for( int j = 0 ; j < p_item->pp_categories[i]->i_infos ; j++ )
- {
- info_tree->AppendItem( cat , (wxString)
- wxU(p_item->pp_categories[i]->pp_infos[j]->psz_name) +
- wxT(": ") +
- wxU(p_item->pp_categories[i]->pp_infos[j]->psz_value) );
- }
-
- info_tree->Expand( cat );
- }
-}
-
-void AdvancedInfoPanel::Clear()
-{
- info_tree->DeleteChildren( info_root );
-}
-
-void AdvancedInfoPanel::OnOk( )
-{
-}
-
-void AdvancedInfoPanel::OnCancel( )
-{
-}
-
-/*****************************************************************************
- * Statistics info panel
- *****************************************************************************/
-BEGIN_EVENT_TABLE( InputStatsInfoPanel, wxPanel )
-END_EVENT_TABLE()
-
-InputStatsInfoPanel::InputStatsInfoPanel( intf_thread_t *_p_intf,
- wxWindow* _p_parent ):
- wxPanel( _p_parent, -1 )
-{
- /* Initializations */
- p_intf = _p_intf;
- p_parent = _p_parent;
-
- SetAutoLayout( TRUE );
-
- panel_sizer = new wxBoxSizer( wxVERTICAL );
-
- sizer = new wxFlexGridSizer( 2,2,20 );
-
- /* Input */
- wxStaticBox *input_box = new wxStaticBox( this, -1,
- wxU( _("Input") ) );
- input_box->SetAutoLayout( TRUE );
- input_bsizer = new wxStaticBoxSizer( input_box, wxVERTICAL );
- input_sizer = new wxFlexGridSizer( 4, 3, 2, 20 );
-
-#define INPUT_ADD(txt,widget,dflt) \
- { input_sizer->Add ( new wxStaticText( this, -1, wxU(_( txt ) ) ), \
- 0, wxALIGN_LEFT|wxLEFT, 5 ); \
- input_sizer->Add( 0, 0, wxEXPAND ); \
- widget = new wxStaticText( this, -1, wxU( dflt ), wxDefaultPosition, wxDefaultSize, wxALIGN_RIGHT ); \
- input_sizer->Add( widget, 0, wxALIGN_RIGHT|wxRIGHT, 5 ); \
- }
-
- INPUT_ADD( "Read at media", read_bytes_text, "0" );
- INPUT_ADD( "Input bitrate", input_bitrate_text, " 0" );
-
- INPUT_ADD( "Demuxed", demux_bytes_text ,"0");
- INPUT_ADD( "Stream bitrate", demux_bitrate_text, "0" );
-
- input_sizer->Layout();
- input_bsizer->Add( input_sizer, 0, wxALL | wxGROW, 5 );
- input_bsizer->Layout();
- sizer->Add( input_bsizer, 0, wxALL|wxGROW, 5 );
-
- /* Vout */
- wxStaticBox *video_box = new wxStaticBox( this, -1, wxU( _("Video" ) ) );
- video_box->SetAutoLayout( TRUE );
- video_bsizer = new wxStaticBoxSizer( video_box, wxVERTICAL );
- video_sizer = new wxFlexGridSizer( 3, 3, 2, 20 );
-
-#define VIDEO_ADD(txt,widget,dflt) \
- { video_sizer->Add ( new wxStaticText( this, -1, wxU(_( txt ) ) ), \
- 0, wxALIGN_LEFT|wxLEFT , 5 ); \
- video_sizer->Add( 0, 0, wxEXPAND ); \
- widget = new wxStaticText( this, -1, wxU( dflt ), wxDefaultPosition, wxDefaultSize, wxALIGN_RIGHT ); \
- video_sizer->Add( widget, 0, wxALIGN_RIGHT|wxRIGHT, 5 ); \
- }
- VIDEO_ADD( "Decoded blocks", video_decoded_text, "0" );
- VIDEO_ADD( "Displayed frames", displayed_text, " 0" );
- VIDEO_ADD( "Lost frames", lost_frames_text, "0" );
-
-
- video_sizer->Layout();
- video_bsizer->Add( video_sizer, 0, wxALL | wxGROW, 5 );
- video_bsizer->Layout();
- sizer->Add( video_bsizer , 0, wxALL| wxGROW, 5 );
-
- /* Sout */
- wxStaticBox *sout_box = new wxStaticBox( this, -1,
- wxU( _("Streaming" ) ) );
- sout_box->SetAutoLayout( TRUE );
- sout_bsizer = new wxStaticBoxSizer( sout_box, wxVERTICAL );
- sout_sizer = new wxFlexGridSizer( 3, 3, 2, 20 );
-
-#define SOUT_ADD(txt,widget,dflt) \
- { sout_sizer->Add ( new wxStaticText( this, -1, wxU(_( txt ) ) ), \
- 0, wxALIGN_LEFT|wxLEFT, 5 ); \
- sout_sizer->Add( 0, 0, wxEXPAND ); \
- widget = new wxStaticText( this, -1, wxU( dflt ), wxDefaultPosition, wxDefaultSize, wxALIGN_RIGHT ); \
- sout_sizer->Add( widget, 0,wxALIGN_RIGHT|wxRIGHT, 5 ); \
- }
- SOUT_ADD( "Sent packets", sout_sent_packets_text, " 0" );
- SOUT_ADD( "Sent bytes", sout_sent_bytes_text, "0" );
- SOUT_ADD( "Send rate", sout_send_bitrate_text, "0" );
- sout_sizer->Layout();
- sout_bsizer->Add( sout_sizer, 0, wxALL | wxGROW, 5 );
- sout_bsizer->Layout();
- sizer->Add( sout_bsizer , 0, wxALL| wxGROW, 5 );
-
- /* Aout */
- wxStaticBox *audio_box = new wxStaticBox( this, -1,
- wxU( _("Audio" ) ) );
- audio_box->SetAutoLayout( TRUE );
- audio_bsizer = new wxStaticBoxSizer( audio_box, wxVERTICAL );
- audio_sizer = new wxFlexGridSizer( 3, 3, 2, 20 );
-
-#define AUDIO_ADD(txt,widget,dflt) \
- { audio_sizer->Add ( new wxStaticText( this, -1, wxU(_( txt ) ) ), \
- 0, wxALIGN_LEFT|wxLEFT, 5 ); \
- audio_sizer->Add( 0, 0, wxEXPAND ); \
- widget = new wxStaticText( this, -1, wxU( dflt ), wxDefaultPosition, wxDefaultSize, wxALIGN_RIGHT ); \
- audio_sizer->Add( widget, 0, wxALIGN_RIGHT|wxRIGHT, 5 ); \
- }
- AUDIO_ADD( "Decoded blocks", audio_decoded_text, " 0" );
- AUDIO_ADD( "Played buffers", played_abuffers_text, "0" );
- AUDIO_ADD( "Lost buffers", lost_abuffers_text, "0" );
- audio_sizer->Layout();
- audio_bsizer->Add( audio_sizer, 0, wxALL | wxGROW, 5 );
- audio_bsizer->Layout();
- sizer->Add( audio_bsizer , 0, wxALL| wxGROW, 5 );
-
- sizer->Layout();
- panel_sizer->Add( sizer, 0, wxEXPAND, 5 );
- panel_sizer->Layout();
- SetSizerAndFit( panel_sizer );
-}
-
-InputStatsInfoPanel::~InputStatsInfoPanel()
-{
-}
-
-void InputStatsInfoPanel::Update( input_item_t *p_item )
-{
- vlc_mutex_lock( &p_item->p_stats->lock );
-
- /* Input */
-#define UPDATE( widget,format, calc... ) \
-{ \
- wxString formatted; \
- formatted.Printf( wxString( wxT(format) ), ## calc ); \
- widget->SetLabel( formatted ); \
-}
- UPDATE( read_bytes_text, "%8.0f kB",(float)(p_item->p_stats->i_read_bytes)/1000 );
- UPDATE( input_bitrate_text, "%6.0f kb/s", (float)(p_item->p_stats->f_input_bitrate)*8000 );
- UPDATE( demux_bytes_text, "%8.0f kB", (float)(p_item->p_stats->i_demux_read_bytes)/1000 );
- UPDATE( demux_bitrate_text, "%6.0f kb/s", (float)(p_item->p_stats->f_demux_bitrate)*8000 );
-
- /* Video */
- UPDATE( video_decoded_text, "%5i", p_item->p_stats->i_decoded_video );
- UPDATE( displayed_text, "%5i", p_item->p_stats->i_displayed_pictures );
- UPDATE( lost_frames_text, "%5i", p_item->p_stats->i_lost_pictures );
-
- /* Sout */
- UPDATE( sout_sent_packets_text, "%5i", p_item->p_stats->i_sent_packets );
- UPDATE( sout_sent_bytes_text, "%8.0f kB",
- (float)(p_item->p_stats->i_sent_bytes)/1000 );
- UPDATE( sout_send_bitrate_text, "%6.0f kb/s",
- (float)(p_item->p_stats->f_send_bitrate*8)*1000 );
-
- /* Audio*/
- UPDATE( audio_decoded_text, "%5i", p_item->p_stats->i_decoded_audio );
- UPDATE( played_abuffers_text, "%5i", p_item->p_stats->i_played_abuffers );
- UPDATE( lost_abuffers_text, "%5i", p_item->p_stats->i_lost_abuffers );
-
- vlc_mutex_unlock( &p_item->p_stats->lock );
-
- input_sizer->Layout();
- video_sizer->Layout();
- sout_sizer->Layout();
- audio_sizer->Layout();
-
- sizer->Layout();
- panel_sizer->Layout();
- SetSizerAndFit( panel_sizer );
-}
-
-void InputStatsInfoPanel::Clear()
-{}
-
-void InputStatsInfoPanel::OnOk( )
-{}
-
-void InputStatsInfoPanel::OnCancel( )
-{}
-
+++ /dev/null
-/*****************************************************************************
- * infopanels.hpp: Information panels (statistics, general info, ...)
- *****************************************************************************
- * Copyright (C) 1999-2005 the VideoLAN team
- * $Id$
- *
- * Authors: Clément Stenac <zorglub@videolan.org>
- *
- * 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., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
- *****************************************************************************/
-
-#ifndef _WXVLC_INFOPANELS_H_
-#define _WXVLC_INFOPANELS_H_
-
-#include "wxwidgets.hpp"
-
-#include <wx/treectrl.h>
-
-namespace wxvlc
-{
-class MetaDataPanel: public wxPanel
-{
-public:
- /* Constructor */
- MetaDataPanel( intf_thread_t *p_intf, wxWindow *p_parent, bool );
- virtual ~MetaDataPanel();
-
- void Update( input_item_t *);
- void Clear();
-
- char* GetURI();
- char* GetName();
-
- void OnOk();
- void OnCancel();
-
-private:
- DECLARE_EVENT_TABLE();
-
- intf_thread_t *p_intf;
- input_item_t *p_item;
- wxWindow *p_parent;
-
- wxTextCtrl *uri_text;
- wxTextCtrl *name_text;
- wxStaticText *uri_label;
- wxStaticText *name_label;
-
- wxStaticText *artist_text;
- wxStaticText *genre_text;
- wxStaticText *copyright_text;
- wxStaticText *collection_text;
- wxStaticText *seqnum_text;
- wxStaticText *description_text;
- wxStaticText *rating_text;
- wxStaticText *date_text;
- wxStaticText *setting_text;
- wxStaticText *language_text;
- wxStaticText *nowplaying_text;
- wxStaticText *publisher_text;
-
- bool b_modifiable;
-};
-
-
-class AdvancedInfoPanel: public wxPanel
-{
-public:
- /* Constructor */
- AdvancedInfoPanel( intf_thread_t *p_intf, wxWindow *p_parent );
- virtual ~AdvancedInfoPanel();
-
- void Update( input_item_t *);
- void Clear();
-
-
- char* GetURI();
- char* GetName();
-
- void OnOk();
- void OnCancel();
-
-private:
- DECLARE_EVENT_TABLE();
-
- intf_thread_t *p_intf;
- input_item_t *p_item;
- wxWindow *p_parent;
-
- wxTextCtrl *uri_text;
- wxTextCtrl *name_text;
- wxStaticText *uri_label;
- wxStaticText *name_label;
-
- wxTreeCtrl *info_tree;
- wxTreeItemId info_root;
-
- bool b_modifiable;
-};
-
-class InputStatsInfoPanel: public wxPanel
-{
-public:
- /* Constructor */
- InputStatsInfoPanel( intf_thread_t *p_intf,wxWindow *p_parent );
- virtual ~InputStatsInfoPanel();
-
- void Update( input_item_t *);
- void Clear();
-
- void OnOk();
- void OnCancel();
-
-private:
- DECLARE_EVENT_TABLE();
-
- intf_thread_t *p_intf;
- input_item_t *p_item;
- wxWindow *p_parent;
-
- wxBoxSizer *panel_sizer;
- wxFlexGridSizer *sizer;
-
- wxFlexGridSizer *input_sizer;
- wxStaticBoxSizer *input_bsizer;
- wxStaticText *read_bytes_text;
- wxStaticText *input_bitrate_text;
- wxStaticText *demux_bytes_text;
- wxStaticText *demux_bitrate_text;
-
- wxFlexGridSizer *video_sizer;
- wxStaticBoxSizer *video_bsizer;
- wxStaticText *video_decoded_text;
- wxStaticText *displayed_text;
- wxStaticText *lost_frames_text;
-
- wxFlexGridSizer *sout_sizer;
- wxStaticBoxSizer *sout_bsizer;
- wxStaticText *sout_sent_packets_text;
- wxStaticText *sout_sent_bytes_text;
- wxStaticText *sout_send_bitrate_text;
-
- wxFlexGridSizer *audio_sizer;
- wxStaticBoxSizer *audio_bsizer;
- wxStaticText *audio_decoded_text;
- wxStaticText *played_abuffers_text;
- wxStaticText *lost_abuffers_text;
-};
-};
-#endif
+++ /dev/null
-/*****************************************************************************
- * interaction.cpp: wxWidgets handling of interaction dialogs
- *****************************************************************************
- * Copyright (C) 2000-2004 the VideoLAN team
- * $Id$
- *
- * Authors: Clément Stenac <zorglub@videolan.org>
- *
- * 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., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
- *****************************************************************************/
-
-/*****************************************************************************
- * Preamble
- *****************************************************************************/
-#include "dialogs/interaction.hpp"
-
-#include <wx/statline.h>
-
-/*****************************************************************************
- * Event Table.
- *****************************************************************************/
-
-/* IDs for the controls and the menu commands */
-enum
-{
- No_Event,
- NoShow_Event
-};
-
-BEGIN_EVENT_TABLE( InteractionDialog, wxDialog)
- EVT_CLOSE( InteractionDialog::OnClose )
- EVT_BUTTON( wxID_OK, InteractionDialog::OnOkYes )
- EVT_BUTTON( wxID_YES, InteractionDialog::OnOkYes )
- EVT_BUTTON( wxID_CANCEL, InteractionDialog::OnCancel)
- EVT_BUTTON( wxID_CLOSE, InteractionDialog::OnCancel)
- EVT_BUTTON( wxID_NO, InteractionDialog::OnNo )
- EVT_BUTTON( wxID_CLEAR, InteractionDialog::OnClear )
- EVT_CHECKBOX( NoShow_Event, InteractionDialog::OnNoShow )
-END_EVENT_TABLE()
-
-/*****************************************************************************
- * Constructor.
- *****************************************************************************/
-InteractionDialog::InteractionDialog( intf_thread_t *_p_intf,
- wxWindow *p_parent,
- interaction_dialog_t *_p_dialog )
- : wxDialog( p_parent, -1, wxU( _p_dialog->psz_title ) )
-{
-#if 0
- /* Initializations */
- p_intf = _p_intf;
- p_dialog = _p_dialog;
- SetIcon( *p_intf->p_sys->p_icon );
-
- widgets_panel = new wxPanel( this, -1 );
- widgets_sizer = new wxBoxSizer( wxVERTICAL );
- widgets_panel->SetSizer( widgets_sizer );
-
- buttons_panel = new wxPanel( this, -1 );
- buttons_sizer = new wxStdDialogButtonSizer;
- buttons_panel->SetSizer( buttons_sizer );
-
- main_sizer = new wxBoxSizer( wxVERTICAL );
- main_sizer->Add( widgets_panel, 1, wxEXPAND | wxALL, 5 );
- main_sizer->Add( new wxStaticLine( this, -1 ), 0, wxEXPAND );
- main_sizer->Add( buttons_panel, 0, wxEXPAND | wxALL, 5 );
- SetSizer( main_sizer );
-
- b_noshow = false;
- Render();
-#endif
-}
-
-InteractionDialog::~InteractionDialog()
-{
-}
-
-void InteractionDialog::Update( )
-{
-#if 0
- widgets_panel->DestroyChildren();
- /* FIXME: Needed for the spacer */
- buttons_sizer->Remove( 1 );buttons_sizer->Remove( 2 );buttons_sizer->Remove( 3 );
- buttons_panel->DestroyChildren();
- input_widgets.clear();
- Render();
- if( b_noshow == false )
- {
- Show();
- }
-#endif
-}
-
-/// \todo Dirty - Clean that up
-void InteractionDialog::Render()
-{
-#if 0
- wxStaticText *label;
- wxTextCtrl *input;
- wxGauge *gauge;
-
-
- if( p_dialog->i_flags == DIALOG_BLOCKING_ERROR || p_dialog->i_flags == DIALOG_NONBLOCKING_ERROR )
- {
- wxTextCtrl *errors ; // Special case
- label = new wxStaticText( widgets_panel, -1,
- wxU( _("The following errors occurred. More details might be "
- "available in the Messages window.") ) );
- errors = new wxTextCtrl( widgets_panel, -1, wxT(""),
- wxDefaultPosition, wxDefaultSize,
- wxTE_MULTILINE | wxTE_READONLY );
- for( int i = 0 ; i< p_dialog->i_widgets; i++ )
- {
- (*errors) << wxL2U( p_dialog->pp_widgets[i]->psz_text ) <<
- wxU( "\n" ) ;
- }
- widgets_sizer->Add( label );
- widgets_sizer->Add( errors, 0, wxEXPAND|wxALL, 3 );
- }
- else
- {
- //-------------- Widgets ------------------
- for( int i = 0 ; i< p_dialog->i_widgets; i++ )
- {
- user_widget_t* p_widget = p_dialog->pp_widgets[i];
- /// \todo Merge cleanly with preferences widgets
- switch( p_widget->i_type )
- {
- case WIDGET_TEXT:
- label = new wxStaticText( widgets_panel, -1,
- wxU( p_widget->psz_text ) );
- widgets_sizer->Add( label );
- break;
- case WIDGET_INPUT_TEXT:
- label = new wxStaticText( widgets_panel, -1,
- wxU( p_widget->psz_text ) );
- input = new wxTextCtrl( widgets_panel, -1 );
- widgets_sizer->Add( label , 0, 0, 0);
- widgets_sizer->Add( input, 0, wxEXPAND , 0 );
-
- InputWidget widget;
- widget.control = input;
- widget.val = &p_widget->val;
- widget.i_type = WIDGET_INPUT_TEXT;
- input_widgets.push_back( widget );
- break;
- case WIDGET_PROGRESS:
- label = new wxStaticText(widgets_panel, -1,
- wxU( p_widget->psz_text ) );
- gauge = new wxGauge( widgets_panel, -1, 100,
- wxDefaultPosition, wxDefaultSize );
- widgets_sizer->Add( label , 0, 0, 0);
- widgets_sizer->Add( gauge, 0, wxEXPAND , 0 );
- gauge->SetValue( (int)(p_widget->val.f_float ) );
- }
- }
- }
-
- //-------------- Buttons ------------------
- if( p_dialog->i_flags & DIALOG_YES_NO_CANCEL )
- {
- wxButton *yes = new wxButton( buttons_panel,
- wxID_YES, wxU( _("&Yes") ) );
- wxButton *no = new wxButton( buttons_panel,
- wxID_NO, wxU( _("&No") ) );
- wxButton *cancel = new wxButton( buttons_panel,
- wxID_CANCEL, wxU( _("&Cancel") ) );
- buttons_sizer->AddButton( yes );
- buttons_sizer->AddButton( no );
- buttons_sizer->AddButton( cancel );
- }
- else if( p_dialog->i_flags & DIALOG_CLEAR_NOSHOW )
- {
- wxCheckBox *noshow = new wxCheckBox( buttons_panel,
- NoShow_Event, wxU( _("Don't show further errors") ) );
- noshow->SetValue( b_noshow );
- wxButton *clear = new wxButton( buttons_panel,
- wxID_CLEAR, wxU( _("&Clear") ) );
- wxButton *close = new wxButton( buttons_panel, wxID_CLOSE,
- wxU( _("&Close") ) );
- close->SetDefault();
- buttons_sizer->Add( noshow, 0, wxEXPAND | wxRIGHT|
- wxLEFT | wxALIGN_LEFT, 5 );
- buttons_sizer->Add( 0, 0, 1 );
- buttons_sizer->AddButton( clear );
- buttons_sizer->SetNegativeButton( clear );
- buttons_sizer->AddButton( close );
- buttons_sizer->SetAffirmativeButton( close );
- }
- widgets_sizer->Layout();
- widgets_panel->SetSizerAndFit( widgets_sizer );
- buttons_sizer->Realize();
- buttons_panel->SetSizerAndFit( buttons_sizer );
- main_sizer->Layout();
- SetSizerAndFit( main_sizer );
-#endif
-}
-
-/*****************************************************************************
- * Private methods.
- *****************************************************************************/
-void InteractionDialog::OnClose( wxCloseEvent& event )
-{
- Finish( DIALOG_CANCELLED );
-}
-
-void InteractionDialog::OnCancel( wxCommandEvent& event )
-{
- Finish( DIALOG_CANCELLED );
-}
-
-void InteractionDialog::OnNo( wxCommandEvent& event )
-{
- Finish( DIALOG_NO );
-}
-
-void InteractionDialog::OnOkYes( wxCommandEvent& event )
-{
- Finish( DIALOG_OK_YES );
-}
-
-void InteractionDialog::OnClear( wxCommandEvent& event )
-{
-#if 0
- int i;
- vlc_object_lock( p_dialog->p_interaction );
- for( i = p_dialog->i_widgets - 1 ; i >= 0 ; i-- )
- {
- user_widget_t *p_widget = p_dialog->pp_widgets[i];
- FREENULL( p_widget->psz_text );
- FREENULL( p_widget->val.psz_string );
- REMOVE_ELEM( p_dialog->pp_widgets, p_dialog->i_widgets, i );
- free( p_widget );
- }
- widgets_panel->DestroyChildren();
- /* FIXME: Needed for the spacer */
- buttons_sizer->Remove( 1 );buttons_sizer->Remove( 2 );
- buttons_sizer->Remove( 3 );
- buttons_panel->DestroyChildren();
- input_widgets.clear();
- vlc_object_unlock( p_dialog->p_interaction );
- Render();
-#endif
-}
-
-void InteractionDialog::OnNoShow( wxCommandEvent& event )
-{
- b_noshow = event.IsChecked();
-}
-
-void InteractionDialog::Finish( int i_ret )
-{
-#if 0
- vlc_object_lock( p_dialog->p_interaction );
- vector<InputWidget>::iterator it = input_widgets.begin();
- while ( it < input_widgets.end() )
- {
- if( (*it).i_type == WIDGET_INPUT_TEXT )
- (*it).val->psz_string = strdup( (*it).control->GetValue().mb_str(wxConvUTF8));
- it++;
- }
- Hide();
- p_dialog->i_status = ANSWERED_DIALOG;
- p_dialog->i_return = i_ret;
- vlc_object_unlock( p_dialog->p_interaction );
-#endif
-}
+++ /dev/null
-/*****************************************************************************
- * interaction.hpp : Headers for an interaction dialog
- *****************************************************************************
- * Copyright (C) 1999-2005 the VideoLAN team
- * $Id$
- *
- * Authors: Clément Stenac <zorglub@videolan.org>
- *
- * 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., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
- *****************************************************************************/
-
-#ifndef _WXVLC_INTERACTION_H_
-#define _WXVLC_INTERACTION_H_
-
-#include "wxwidgets.hpp"
-#include <vlc_interface.h>
-
-#include <vector>
-using namespace std;
-
-namespace wxvlc
-{
-
- struct InputWidget
- {
- /// \todo Clean up
- wxTextCtrl *control;
- vlc_value_t *val;
- int i_type;
- };
-
- class InteractionDialog: public wxDialog
- {
- public:
- /* Constructor */
- InteractionDialog( intf_thread_t *p_intf, wxWindow *p_parent,
- interaction_dialog_t * );
- virtual ~InteractionDialog();
-
- void Update();
-
- private:
- /* Event handlers (these functions should _not_ be virtual) */
- void OnClose ( wxCloseEvent& event );
- void OnOkYes ( wxCommandEvent& event );
- void OnCancel( wxCommandEvent& event );
- void OnNo ( wxCommandEvent& event );
- void OnClear ( wxCommandEvent& event );
- void OnNoShow( wxCommandEvent& event );
-
- void Render();
- void Finish( int );
-
- wxBoxSizer *widgets_sizer;
- wxPanel *widgets_panel;
- wxStdDialogButtonSizer *buttons_sizer;
- wxPanel *buttons_panel;
-
- wxBoxSizer *main_sizer;
-
- DECLARE_EVENT_TABLE();
-
- vector<InputWidget> input_widgets;
-
- intf_thread_t *p_intf;
- interaction_dialog_t *p_dialog;
- wxWindow *p_parent;
-
- bool b_noshow;
- };
-};
-
-#endif
+++ /dev/null
-/*****************************************************************************
- * iteminfo.cpp : wxWindows plugin for vlc
- *****************************************************************************
- * Copyright (C) 2000-2004 the VideoLAN team
- * $Id$
- *
- * Authors: Clément Stenac <zorglub@videolan.org>
- *
- * 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., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
- *****************************************************************************/
-
-#include "dialogs/iteminfo.hpp"
-#include "dialogs/infopanels.hpp"
-#include <wx/combobox.h>
-#include <wx/statline.h>
-
-#ifndef wxRB_SINGLE
-# define wxRB_SINGLE 0
-#endif
-
-/*****************************************************************************
- * Event Table.
- *****************************************************************************/
-
-/* IDs for the controls and the menu commands */
-enum
-{
- Uri_Event,
- Name_Event,
- Enabled_Event,
-};
-
-BEGIN_EVENT_TABLE(ItemInfoDialog, wxDialog)
- /* Button events */
- EVT_BUTTON(wxID_OK, ItemInfoDialog::OnOk)
- EVT_BUTTON(wxID_CANCEL, ItemInfoDialog::OnCancel)
-
-END_EVENT_TABLE()
-
-/*****************************************************************************
- * Constructor.
- *****************************************************************************/
-ItemInfoDialog::ItemInfoDialog( intf_thread_t *_p_intf,
- playlist_item_t *_p_item,
- wxWindow* _p_parent ):
- wxDialog( _p_parent, -1, wxU(_("Playlist item info")),
- wxDefaultPosition, wxDefaultSize, wxDEFAULT_FRAME_STYLE )
-{
- /* Initializations */
- p_intf = _p_intf;
- p_parent = _p_parent;
- p_item = _p_item;
- SetIcon( *p_intf->p_sys->p_icon );
-
- /* Create a panel to put everything in */
- wxPanel *panel = new wxPanel( this, -1 );
- panel->SetAutoLayout( TRUE );
-
- /* Create the standard info panel */
- info_panel = new MetaDataPanel(p_intf, panel, true );
- info_panel->Update( p_item->p_input );
- /* Separation */
- wxStaticLine *static_line = new wxStaticLine( panel, wxID_OK );
-
- /* Create the buttons */
- wxButton *ok_button = new wxButton( panel, wxID_OK, wxU(_("&OK")) );
- ok_button->SetDefault();
- wxButton *cancel_button = new wxButton( panel, wxID_CANCEL,
- wxU(_("&Cancel")) );
-
- /* Place everything in sizers */
- wxStdDialogButtonSizer *button_sizer = new wxStdDialogButtonSizer;
- button_sizer->AddButton( ok_button );
- button_sizer->AddButton( cancel_button );
- button_sizer->Realize();
- wxBoxSizer *main_sizer = new wxBoxSizer( wxVERTICAL );
- wxBoxSizer *panel_sizer = new wxBoxSizer( wxVERTICAL );
- panel_sizer->Add( info_panel, 1, wxEXPAND | wxALL, 5 );
- panel_sizer->Add( static_line, 0, wxEXPAND | wxALL, 5 );
- panel_sizer->Add( button_sizer, 0, wxEXPAND | wxALL, 5 );
- panel_sizer->Layout();
- panel->SetSizerAndFit( panel_sizer );
- main_sizer->Add( panel, 1, wxGROW, 0 );
- main_sizer->Layout();
- SetSizerAndFit( main_sizer );
-}
-
-ItemInfoDialog::~ItemInfoDialog()
-{
-}
-
-
-/*****************************************************************************
- * Events methods.
- *****************************************************************************/
-void ItemInfoDialog::OnOk( wxCommandEvent& WXUNUSED(event) )
-{
- input_item_SetName( p_item->p_input, info_panel->GetName() );
- input_item_SetURI( p_item->p_input, info_panel->GetURI() );
- EndModal( wxID_OK );
-}
-
-void ItemInfoDialog::OnCancel( wxCommandEvent& WXUNUSED(event) )
-{
- EndModal( wxID_CANCEL );
-}
+++ /dev/null
-/*****************************************************************************
- * iteminfo.hpp: private wxWindows interface description
- *****************************************************************************
- * Copyright (C) 1999-2005 the VideoLAN team
- * $Id$
- *
- * Authors: Gildas Bazin <gbazin@videolan.org>
- *
- * 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., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
- *****************************************************************************/
-
-#ifndef _WXVLC_ITEMINFO_H_
-#define _WXVLC_ITEMINFO_H_
-
-#include "wxwidgets.hpp"
-#include "dialogs/infopanels.hpp"
-#include <wx/treectrl.h>
-
-namespace wxvlc
-{
-class ItemInfoDialog: public wxDialog
-{
-public:
- /* Constructor */
- ItemInfoDialog( intf_thread_t *p_intf, playlist_item_t *_p_item,
- wxWindow *p_parent );
- virtual ~ItemInfoDialog();
-
- wxArrayString GetOptions();
-
-private:
- wxPanel *GroupPanel( wxWindow* parent );
-
- /* Event handlers (these functions should _not_ be virtual) */
- void OnOk( wxCommandEvent& event );
- void OnCancel( wxCommandEvent& event );
-
- void UpdateInfo();
-
- DECLARE_EVENT_TABLE();
-
- intf_thread_t *p_intf;
- playlist_item_t *p_item;
- wxWindow *p_parent;
-
- /* Controls for the iteminfo dialog box */
- wxPanel *info_subpanel;
- MetaDataPanel *info_panel;
-
- wxPanel *group_subpanel;
- wxPanel *group_panel;
-
- wxTextCtrl *uri_text;
- wxTextCtrl *name_text;
-
- wxTreeCtrl *info_tree;
- wxTreeItemId info_root;
-
-};
-
-};
-#endif
+++ /dev/null
-/*****************************************************************************
- * messages.cpp : wxWindows plugin for vlc
- *****************************************************************************
- * Copyright (C) 2000-2004 the VideoLAN team
- * $Id$
- *
- * 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., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
- *****************************************************************************/
-
-#include "dialogs/messages.hpp"
-
-/*****************************************************************************
- * Event Table.
- *****************************************************************************/
-
-/* IDs for the controls and the menu commands */
-
-BEGIN_EVENT_TABLE(Messages, wxFrame)
- /* Button events */
- EVT_BUTTON(wxID_CLOSE, Messages::OnButtonClose)
- EVT_BUTTON(wxID_CLEAR, Messages::OnClear)
- EVT_BUTTON(wxID_SAVEAS, Messages::OnSaveLog)
-
- /* Special events : we don't want to destroy the window when the user
- * clicks on (X) */
- EVT_CLOSE(Messages::OnClose)
-END_EVENT_TABLE()
-
-/*****************************************************************************
- * Constructor.
- *****************************************************************************/
-Messages::Messages( intf_thread_t *_p_intf, wxWindow *p_parent ):
- wxFrame( p_parent, -1, wxU(_("Messages")), wxDefaultPosition,
- wxDefaultSize, wxDEFAULT_FRAME_STYLE )
-{
- /* Initializations */
- p_intf = _p_intf;
- b_verbose = false;
- SetIcon( *p_intf->p_sys->p_icon );
- save_log_dialog = NULL;
- b_verbose = false;
-
- /* Create a panel to put everything in */
- wxPanel *messages_panel = new wxPanel( this, -1 );
- messages_panel->SetAutoLayout( TRUE );
-
- /* Create the textctrl and some text attributes */
- textctrl = new wxTextCtrl( messages_panel, -1, wxT(""), wxDefaultPosition,
- wxSize::wxSize( 400, 500 ), wxTE_MULTILINE | wxTE_READONLY |
- wxTE_RICH | wxTE_NOHIDESEL );
- info_attr = new wxTextAttr( wxColour::wxColour( 0, 128, 0 ) );
- err_attr = new wxTextAttr( *wxRED );
- warn_attr = new wxTextAttr( *wxBLUE );
- dbg_attr = new wxTextAttr( *wxBLACK );
-
- /* Create the Close button */
- wxButton *close_button = new wxButton( messages_panel, wxID_CLOSE,
- wxU(_("&Close")));
- close_button->SetDefault();
-
- /* Create the Clear button */
- wxButton *clear_button = new wxButton( messages_panel, wxID_CLEAR,
- wxU(_("Clear")));
-
- /* Create the Save Log button */
- wxButton *save_log_button = new wxButton( messages_panel, wxID_SAVEAS,
- wxU(_("Save &As...")));
-
-
- /* Place everything in sizers */
- wxBoxSizer *buttons_sizer = new wxBoxSizer( wxHORIZONTAL );
- buttons_sizer->Add( save_log_button, 0, wxEXPAND |wxALIGN_LEFT| wxALL, 5 );
- buttons_sizer->Add( clear_button, 0, wxEXPAND |wxALIGN_RIGHT| wxALL, 5 );
- buttons_sizer->Add( close_button, 0, wxEXPAND |wxALIGN_RIGHT| wxALL, 5 );
- buttons_sizer->Add( new wxPanel( this, -1 ), 1, wxALL, 5 );
- buttons_sizer->Layout();
- wxBoxSizer *main_sizer = new wxBoxSizer( wxVERTICAL );
- wxBoxSizer *panel_sizer = new wxBoxSizer( wxVERTICAL );
- panel_sizer->Add( textctrl, 1, wxEXPAND | wxALL, 5 );
- panel_sizer->Add( buttons_sizer, 0, wxEXPAND | wxALL, 5 );
- panel_sizer->Layout();
- messages_panel->SetSizerAndFit( panel_sizer );
- main_sizer->Add( messages_panel, 1, wxGROW, 0 );
- main_sizer->Layout();
- SetSizerAndFit( main_sizer );
-}
-
-Messages::~Messages()
-{
- /* Clean up */
- delete save_log_dialog;
- delete info_attr;
- delete err_attr;
- delete warn_attr;
- delete dbg_attr;
-}
-
-bool Messages::Show( bool show )
-{
- b_verbose = show;
- return wxFrame::Show( show );
-}
-
-void Messages::UpdateLog()
-{
- msg_subscription_t *p_sub = p_intf->p_sys->p_sub;
- int i_start;
-
- vlc_mutex_lock( p_sub->p_lock );
- int i_stop = *p_sub->pi_stop;
- vlc_mutex_unlock( p_sub->p_lock );
-
-
- if( p_sub->i_start != i_stop )
- {
- textctrl->SetInsertionPointEnd();
-
- for( i_start = p_sub->i_start;
- i_start != i_stop;
- i_start = (i_start+1) % VLC_MSG_QSIZE )
- {
-
- if( !b_verbose &&
- VLC_MSG_ERR != p_sub->p_msg[i_start].i_type )
- continue;
-
- /* Append all messages to log window */
- textctrl->SetDefaultStyle( *dbg_attr );
- (*textctrl) << wxL2U(p_sub->p_msg[i_start].psz_module);
-
- switch( p_sub->p_msg[i_start].i_type )
- {
- case VLC_MSG_INFO:
- (*textctrl) << wxT(": ");
- textctrl->SetDefaultStyle( *info_attr );
- break;
- case VLC_MSG_ERR:
- (*textctrl) << wxT(" error: ");
- textctrl->SetDefaultStyle( *err_attr );
- break;
- case VLC_MSG_WARN:
- (*textctrl) << wxT(" warning: ");
- textctrl->SetDefaultStyle( *warn_attr );
- break;
- case VLC_MSG_DBG:
- default:
- (*textctrl) << wxT(" debug: ");
- break;
- }
-
- /* Add message */
- (*textctrl) << wxL2U(p_sub->p_msg[i_start].psz_msg) << wxT("\n");
- }
-
- vlc_mutex_lock( p_sub->p_lock );
- p_sub->i_start = i_start;
- vlc_mutex_unlock( p_sub->p_lock );
- }
-}
-
-/*****************************************************************************
- * Private methods.
- *****************************************************************************/
-void Messages::OnButtonClose( wxCommandEvent& WXUNUSED(event) )
-{
- wxCloseEvent cevent;
- OnClose(cevent);
-}
-
-void Messages::OnClose( wxCloseEvent& WXUNUSED(event) )
-{
- Hide();
-}
-
-void Messages::OnClear( wxCommandEvent& WXUNUSED(event) )
-{
- textctrl->Clear();
-}
-
-void Messages::OnSaveLog( wxCommandEvent& WXUNUSED(event) )
-{
- if( save_log_dialog == NULL )
- save_log_dialog = new wxFileDialog( this,
- wxU(_("Save Messages As...")),
- wxT(""), wxT("messages"), wxT("*"), wxSAVE | wxOVERWRITE_PROMPT );
-
- if( save_log_dialog && save_log_dialog->ShowModal() == wxID_OK )
- {
- if( !textctrl->SaveFile( save_log_dialog->GetPath() ) )
- {
- // [FIX ME] should print an error message
- }
- }
-}
+++ /dev/null
-/*****************************************************************************
- * messages.hpp: Messages dialog
- *****************************************************************************
- * Copyright (C) 1999-2005 the VideoLAN team
- * $Id$
- *
- * Authors: Gildas Bazin <gbazin@videolan.org>
- *
- * 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., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
- *****************************************************************************/
-
-#ifndef _WXVLC_MESSAGES_H_
-#define _WXVLC_MESSAGES_H_
-
-#include "wxwidgets.hpp"
-
-namespace wxvlc
-{
- class Messages: public wxFrame
- {
- public:
- /* Constructor */
- Messages( intf_thread_t *p_intf, wxWindow *p_parent );
- virtual ~Messages();
- bool Show( bool show = TRUE );
- void UpdateLog();
-
- private:
- /* Event handlers (these functions should _not_ be virtual) */
- void OnButtonClose( wxCommandEvent& event );
- void OnClose( wxCloseEvent& WXUNUSED(event) );
- void OnClear( wxCommandEvent& event );
- void OnSaveLog( wxCommandEvent& event );
-
- DECLARE_EVENT_TABLE();
-
- intf_thread_t *p_intf;
- wxTextCtrl *textctrl;
- wxTextAttr *info_attr;
- wxTextAttr *err_attr;
- wxTextAttr *warn_attr;
- wxTextAttr *dbg_attr;
-
- wxFileDialog *save_log_dialog;
-
- bool b_verbose;
- };
-};
-
-#endif
+++ /dev/null
-/*****************************************************************************
- * open.cpp : Open dialog box
- *****************************************************************************
- * Copyright (C) 2000-2005 the VideoLAN team
- * $Id$
- *
- * Authors: Gildas Bazin <gbazin@videolan.org>
- *
- * 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., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
- *****************************************************************************/
-
-/*****************************************************************************
- * Preamble
- *****************************************************************************/
-#include "dialogs/open.hpp"
-#include "dialogs/streamout.hpp"
-#include "dialogs/preferences_widgets.h"
-#include "dialogs/subtitles.hpp"
-
-#include "vlc_charset.h"
-
-#undef HAVE_LIBCDIO // Disable broken code
-
-#ifdef HAVE_LIBCDIO
-#include <cdio/cdio.h>
-#include <cdio/cd_types.h>
-#include <cdio/logging.h>
-#endif /* HAVE_LIBCDIO */
-
-#ifdef HAVE_VCDINFO
-#include <libvcd/version.h>
-/* There was a bug in libvcdinfo <= 23 which prevented C++ compilation */
-#if LIBVCD_VERSION_NUM > 23
-#include <libvcd/info.h>
-#endif /* LIBVCD_VERSION_NUM > 23 */
-#endif /* HAVE_VCDINFO */
-
-#include <wx/combobox.h>
-#include <wx/statline.h>
-#include <wx/tokenzr.h>
-
-#ifndef wxRB_SINGLE
-# define wxRB_SINGLE 0
-#endif
-
-#define SELECTION_DISC_TYPE_DVD_MENUS 0
-#define SELECTION_DISC_TYPE_DVD 1
-#define SELECTION_DISC_TYPE_VCD 2
-#define SELECTION_DISC_TYPE_CDDA 3
-
-/*****************************************************************************
- * Event Table.
- *****************************************************************************/
-
-/* IDs for the controls and the menu commands */
-enum
-{
- Notebook_Event = wxID_HIGHEST,
- MRL_Event,
-
- FileBrowse_Event,
- SubFileBrowse_Event,
- FileName_Event,
- SubFileName_Event,
-
- DiscType_Event,
-#ifdef HAVE_LIBCDIO
- DiscProbe_Event,
-#endif
- DiscDevice_Event,
- DiscTitle_Event,
- DiscChapter_Event,
- DiscSub_Event,
- DiscAudio_Event,
-
- NetType_Event,
- NetRadio1_Event, NetRadio2_Event, NetRadio3_Event, NetRadio4_Event,
- NetPort1_Event, NetPort2_Event, NetPort3_Event,
- NetAddr1_Event, NetAddr2_Event, NetAddr3_Event, NetAddr4_Event,
- NetForceIPv6_Event, NetTimeshift_Event,
-
- SubsFileEnable_Event,
- SubsFileSettings_Event,
-
- SoutEnable_Event,
- SoutSettings_Event,
-
- CachingEnable_Event,
- CachingChange_Event,
-
- AdvancedOptions_Event
-};
-
-BEGIN_EVENT_TABLE(OpenDialog, wxDialog)
- /* Button events */
- EVT_BUTTON(wxID_OK, OpenDialog::OnOk)
- EVT_BUTTON(wxID_CANCEL, OpenDialog::OnCancel)
-
- EVT_NOTEBOOK_PAGE_CHANGED(Notebook_Event, OpenDialog::OnPageChange)
-
- EVT_TEXT(MRL_Event, OpenDialog::OnMRLChange)
-
- /* Events generated by the file panel */
- EVT_TEXT(FileName_Event, OpenDialog::OnFilePanelChange)
- EVT_BUTTON(FileBrowse_Event, OpenDialog::OnFileBrowse)
- EVT_TEXT(SubFileName_Event, OpenDialog::OnSubFileChange)
- EVT_BUTTON(SubFileBrowse_Event, OpenDialog::OnSubFileBrowse)
-
- /* Events generated by the disc panel */
- EVT_RADIOBOX(DiscType_Event, OpenDialog::OnDiscTypeChange)
-#ifdef HAVE_LIBCDIO
- EVT_CHECKBOX(DiscProbe_Event, OpenDialog::OnDiscProbe)
-#endif
- EVT_TEXT(DiscDevice_Event, OpenDialog::OnDiscDeviceChange)
- EVT_TEXT(DiscDevice_Event, OpenDialog::OnDiscPanelChange)
- EVT_TEXT(DiscTitle_Event, OpenDialog::OnDiscPanelChange)
- EVT_SPINCTRL(DiscTitle_Event, OpenDialog::OnDiscPanelChangeSpin)
- EVT_TEXT(DiscChapter_Event, OpenDialog::OnDiscPanelChange)
- EVT_SPINCTRL(DiscChapter_Event, OpenDialog::OnDiscPanelChangeSpin)
- EVT_TEXT(DiscSub_Event, OpenDialog::OnDiscPanelChange)
- EVT_TEXT(DiscAudio_Event, OpenDialog::OnDiscPanelChange)
- EVT_SPINCTRL(DiscSub_Event, OpenDialog::OnDiscPanelChangeSpin)
-
- /* Events generated by the net panel */
- EVT_RADIOBUTTON(NetRadio1_Event, OpenDialog::OnNetTypeChange)
- EVT_RADIOBUTTON(NetRadio2_Event, OpenDialog::OnNetTypeChange)
- EVT_RADIOBUTTON(NetRadio3_Event, OpenDialog::OnNetTypeChange)
- EVT_RADIOBUTTON(NetRadio4_Event, OpenDialog::OnNetTypeChange)
- EVT_TEXT(NetPort1_Event, OpenDialog::OnNetPanelChange)
- EVT_SPINCTRL(NetPort1_Event, OpenDialog::OnNetPanelChangeSpin)
- EVT_TEXT(NetPort2_Event, OpenDialog::OnNetPanelChange)
- EVT_SPINCTRL(NetPort2_Event, OpenDialog::OnNetPanelChangeSpin)
- EVT_TEXT(NetPort3_Event, OpenDialog::OnNetPanelChange)
- EVT_SPINCTRL(NetPort3_Event, OpenDialog::OnNetPanelChangeSpin)
- EVT_TEXT(NetAddr2_Event, OpenDialog::OnNetPanelChange)
- EVT_TEXT(NetAddr3_Event, OpenDialog::OnNetPanelChange)
- EVT_TEXT(NetAddr4_Event, OpenDialog::OnNetPanelChange)
- EVT_CHECKBOX(NetForceIPv6_Event, OpenDialog::OnNetPanelChange)
- EVT_CHECKBOX(NetTimeshift_Event, OpenDialog::OnNetPanelChange)
-
- /* Events generated by the subtitle file buttons */
- EVT_CHECKBOX(SubsFileEnable_Event, OpenDialog::OnSubsFileEnable)
- EVT_BUTTON(SubsFileSettings_Event, OpenDialog::OnSubsFileSettings)
-
- /* Events generated by the stream output buttons */
- EVT_CHECKBOX(SoutEnable_Event, OpenDialog::OnSoutEnable)
- EVT_BUTTON(SoutSettings_Event, OpenDialog::OnSoutSettings)
-
- /* Events generated by the caching button */
- EVT_CHECKBOX(CachingEnable_Event, OpenDialog::OnCachingEnable)
- EVT_TEXT(CachingChange_Event, OpenDialog::OnCachingChange)
- EVT_SPINCTRL(CachingChange_Event, OpenDialog::OnCachingChangeSpin)
-
- /* Hide the window when the user closes the window */
- EVT_CLOSE(OpenDialog::OnClose)
-
-END_EVENT_TABLE()
-
-
-/*****************************************************************************
- * AutoBuiltPanel.
- *****************************************************************************/
-WX_DEFINE_ARRAY(ConfigControl *, ArrayOfConfigControls);
-
-class AutoBuiltPanel : public wxPanel
-{
-public:
-
- AutoBuiltPanel() { }
- AutoBuiltPanel( wxWindow *, OpenDialog *, intf_thread_t *,
- const module_t * );
-
- virtual ~AutoBuiltPanel() {}
-
- void UpdateAdvancedMRL();
-
- wxString name;
- ArrayOfConfigControls config_array;
- ArrayOfConfigControls advanced_config_array;
- wxComboBox *p_advanced_mrl_combo;
-
-private:
- intf_thread_t *p_intf;
- OpenDialog *p_open_dialog;
-
- void OnAdvanced( wxCommandEvent& event );
- wxDialog *p_advanced_dialog;
-
- DECLARE_EVENT_TABLE();
-};
-
-BEGIN_EVENT_TABLE(AutoBuiltPanel, wxPanel)
- EVT_BUTTON(AdvancedOptions_Event, AutoBuiltPanel::OnAdvanced)
-END_EVENT_TABLE()
-
-static void AutoBuildCallback( void *p_data )
-{
- ((OpenDialog *)p_data)->UpdateMRL();
-}
-
-static void AutoBuildAdvancedCallback( void *p_data )
-{
- ((AutoBuiltPanel *)p_data)->UpdateAdvancedMRL();
-}
-
-AutoBuiltPanel::AutoBuiltPanel( wxWindow *parent, OpenDialog *dialog,
- intf_thread_t *_p_intf,
- const module_t *p_module )
- : wxPanel( parent, -1, wxDefaultPosition, wxDefaultSize ),
- name( wxU(module_get_object(p_module)) ),
- p_advanced_mrl_combo( NULL ),
- p_intf( _p_intf ), p_open_dialog( dialog ), p_advanced_dialog( NULL )
-{
- wxBoxSizer *sizer = new wxBoxSizer( wxVERTICAL );
- bool b_advanced = false;
- unsigned int i_confsize;
- module_config_t *p_config;
- int n;
-
- p_config = module_config_get (p_module, &i_confsize);
- for( n = 0; n < i_confsize; n++ )
- {
- module_config_t *p_item = p_config + n;
- if( !(p_item->i_type & CONFIG_HINT) && p_item->b_advanced )
- b_advanced = true;
-
- if( p_item->i_type & CONFIG_HINT || p_item->b_advanced )
- continue;
-
- ConfigControl *control =
- CreateConfigControl( VLC_OBJECT(p_intf), p_item, this );
-
- config_array.Add( control );
-
- /* Don't add items that were not recognized */
- if( control == NULL ) continue;
-
- control->SetUpdateCallback( AutoBuildCallback, (void *)dialog );
-
- sizer->Add( control, 0, wxEXPAND | wxALL, 2 );
- }
-
- if( b_advanced )
- {
- wxButton *button =
- new wxButton( this, AdvancedOptions_Event,
- wxU(_("Advanced options...")) );
- sizer->Add( button, 0, wxALL, 5 );
-
- /* Build the advanced dialog */
- p_advanced_dialog =
- new wxDialog( this, -1, ((wxString)wxU(_("Advanced options"))) +
- wxT(" (") + wxU( module_GetLongName(p_module) ) +
- wxT(")"), wxDefaultPosition, wxDefaultSize,
- wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER );
-
- wxBoxSizer *sizer = new wxBoxSizer( wxVERTICAL );
-
- /* Create MRL combobox */
- wxBoxSizer *mrl_sizer_sizer = new wxBoxSizer( wxHORIZONTAL );
- wxStaticBox *mrl_box =
- new wxStaticBox( p_advanced_dialog, -1,
- wxU(_("Advanced options")) );
- wxStaticBoxSizer *mrl_sizer =
- new wxStaticBoxSizer( mrl_box, wxHORIZONTAL );
- wxStaticText *mrl_label =
- new wxStaticText( p_advanced_dialog, -1, wxU(_("Options:")) );
- p_advanced_mrl_combo =
- new wxComboBox( p_advanced_dialog, MRL_Event, wxT(""),
- wxDefaultPosition, wxDefaultSize );
- mrl_sizer->Add( mrl_label, 0, wxALL | wxALIGN_CENTER, 5 );
- mrl_sizer->Add( p_advanced_mrl_combo, 1, wxALL | wxALIGN_CENTER, 5 );
- mrl_sizer_sizer->Add( mrl_sizer, 1, wxEXPAND | wxALL, 5 );
- sizer->Add( mrl_sizer_sizer, 0, wxEXPAND | wxALL, 2 );
-
- /* Add advanced options to panel */
- for( n = 0; n < i_confsize; n++ )
- {
- module_config_t *p_item = p_config + n;
- if( p_item->i_type & CONFIG_HINT || !p_item->b_advanced )
- continue;
-
- ConfigControl *control =
- CreateConfigControl( VLC_OBJECT(p_intf), p_item,
- p_advanced_dialog );
-
- advanced_config_array.Add( control );
-
- /* Don't add items that were not recognized */
- if( control == NULL ) continue;
-
- control->SetUpdateCallback( AutoBuildAdvancedCallback,
- (void *)this );
-
- sizer->Add( control, 0, wxEXPAND | wxALL, 2 );
- }
-
- /* Separation */
- wxPanel *dummy_panel = new wxPanel( p_advanced_dialog, -1 );
- sizer->Add( dummy_panel, 1 );
- wxStaticLine *static_line =
- new wxStaticLine( p_advanced_dialog, wxID_OK );
- sizer->Add( static_line, 0, wxEXPAND | wxALL, 5 );
-
- /* Create buttons */
- wxButton *ok_button =
- new wxButton( p_advanced_dialog, wxID_OK, wxU(_("&OK")) );
- ok_button->SetDefault();
- wxButton *cancel_button =
- new wxButton( p_advanced_dialog, wxID_CANCEL, wxU(_("&Cancel")) );
- wxStdDialogButtonSizer *button_sizer = new wxStdDialogButtonSizer;
- button_sizer->AddButton( ok_button );
- button_sizer->AddButton( cancel_button );
- button_sizer->Realize();
- sizer->Add( button_sizer, 0, wxEXPAND|wxALL, 5 );
-
- sizer->SetMinSize( 400, -1 );
- p_advanced_dialog->SetSizerAndFit( sizer );
- }
-
- module_config_free (p_config);
-
- this->SetSizerAndFit( sizer );
-}
-
-void AutoBuiltPanel::OnAdvanced( wxCommandEvent& event )
-{
- if( p_advanced_dialog->ShowModal() == wxID_OK )
- {
- UpdateAdvancedMRL();
- p_open_dialog->UpdateMRL();
- }
-}
-
-void AutoBuiltPanel::UpdateAdvancedMRL()
-{
- wxString mrltemp;
-
- for( int i = 0; i < (int)advanced_config_array.GetCount(); i++ )
- {
- ConfigControl *control = advanced_config_array.Item(i);
-
- mrltemp += (i ? wxT(" :") : wxT(":"));
-
- if( control->GetType() == CONFIG_ITEM_BOOL &&
- !control->GetIntValue() ) mrltemp += wxT("no-");
-
- mrltemp += control->GetName();
-
- switch( control->GetType() )
- {
- case CONFIG_ITEM_STRING:
- case CONFIG_ITEM_FILE:
- case CONFIG_ITEM_DIRECTORY:
- case CONFIG_ITEM_MODULE:
- mrltemp += wxT("=\"") + control->GetPszValue() + wxT("\"");
- break;
- case CONFIG_ITEM_INTEGER:
- mrltemp +=
- wxString::Format( wxT("=%i"), control->GetIntValue() );
- break;
- case CONFIG_ITEM_FLOAT:
- mrltemp +=
- wxString::Format(wxT("=%f"), control->GetFloatValue());
- break;
- }
- }
-
- p_advanced_mrl_combo->SetValue( mrltemp );
-}
-
-/*****************************************************************************
- * Constructor.
- *****************************************************************************/
-OpenDialog::OpenDialog( intf_thread_t *_p_intf, wxWindow *_p_parent,
- int i_access_method, int i_arg ):
- wxDialog( _p_parent, -1, wxU(_("Open...")), wxDefaultPosition,
- wxDefaultSize, wxDEFAULT_FRAME_STYLE )
-{
- OpenDialog( _p_intf, _p_parent, i_access_method, i_arg, OPEN_NORMAL );
-}
-
-OpenDialog::OpenDialog( intf_thread_t *_p_intf, wxWindow *_p_parent,
- int i_access_method, int i_arg, int _i_method ):
- wxDialog( _p_parent, -1, wxU(_("Open...")), wxDefaultPosition,
- wxDefaultSize, wxDEFAULT_FRAME_STYLE )
-{
- /* Initializations */
- i_method = _i_method;
- p_intf = _p_intf;
- p_parent = _p_parent;
- SetIcon( *p_intf->p_sys->p_icon );
- file_dialog = NULL;
- i_disc_type_selection = 0;
- i_disc_title = 0;
- i_open_arg = i_arg;
-
- sout_dialog = NULL;
- subsfile_dialog = NULL;
- b_disc_device_changed = false;
-
- /* Create a panel to put everything in */
- wxPanel *panel = new wxPanel( this, -1 );
- panel->SetAutoLayout( TRUE );
-
-
- /* Advanced options */
- wxStaticBox *adv_box = new wxStaticBox( panel, -1,
- wxU(_("Advanced options")) );
- wxStaticBoxSizer *adv_sizer = new wxStaticBoxSizer( adv_box,
- wxVERTICAL );
-
-
- wxFlexGridSizer *common_opt_sizer = new wxFlexGridSizer( 5, 1, 20 );
- if( i_method == OPEN_NORMAL )
- {
- /* Create Stream Output checkox */
- sout_checkbox = new wxCheckBox( panel, SoutEnable_Event,
- wxU(_("Stream/Save")) );
- sout_checkbox->SetToolTip( wxU(_("Use VLC as a stream server")) );
- common_opt_sizer->Add( sout_checkbox, 0,
- wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL );
-
- sout_button = new wxButton( panel, SoutSettings_Event,
- wxU(_("Settings...")) );
- sout_button->Disable();
-
- char *psz_sout = config_GetPsz( p_intf, "sout" );
- if( psz_sout && *psz_sout )
- {
- sout_checkbox->SetValue(TRUE);
- sout_button->Enable();
- subsfile_mrl.Add( wxString(wxT("sout=")) + wxL2U(psz_sout) );
- }
- free( psz_sout );
-
- common_opt_sizer->Add( sout_button, 1, wxALIGN_LEFT |
- wxALIGN_CENTER_VERTICAL );
-
- common_opt_sizer->Add( new wxPanel( this, -1 ), 1,
- wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL );
- }
-
- /* Create caching options */
- caching_checkbox = new wxCheckBox( panel, CachingEnable_Event,
- wxU(_("Caching")) );
- caching_checkbox->SetToolTip( wxU(_("Change the default caching value "
- "(in milliseconds)")) );
- common_opt_sizer->Add( caching_checkbox, 0,
- wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL );
- caching_value = new wxSpinCtrl( panel, CachingChange_Event );
- caching_value->SetRange( 0, 1000000 );
- caching_value->Disable();
- common_opt_sizer->Add( caching_value, 0,
- wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL );
-
-
- wxBoxSizer *mrl_sizer = new wxBoxSizer( wxHORIZONTAL );
- wxStaticText *mrl_label = new wxStaticText( panel, -1,
- wxU(_("Customize:")) );
- mrl_combo = new wxComboBox( panel, MRL_Event, wxT(""),
- wxDefaultPosition, wxDefaultSize );
- //Point(20,25), wxSize(120, -1) );
- mrl_combo->SetToolTip( wxU(_("You can use this field directly by typing "
- "the full MRL you want to open.\n""Alternatively, the field will be "
- "filled automatically when you use the controls above.")) );
-
- mrl_sizer->Add( mrl_label, 0, wxALL | wxALIGN_CENTER_VERTICAL, 5 );
- mrl_sizer->Add( mrl_combo, 1, wxALL | wxEXPAND | wxALIGN_CENTER_VERTICAL,
- 5 );
-
- adv_sizer->Add( common_opt_sizer, 0, wxTOP | wxLEFT|wxRIGHT | wxEXPAND, 5 );
- adv_sizer->Add( mrl_sizer, 0, wxBOTTOM | wxLEFT|wxRIGHT | wxEXPAND, 5 );
-
- /* Separation */
- wxStaticLine *static_line = new wxStaticLine( panel, wxID_OK );
-
- /* Create the buttons */
- wxButton *ok_button = new wxButton( panel, wxID_OK, wxU(_("&OK")) );
- ok_button->SetDefault();
- wxButton *cancel_button = new wxButton( panel, wxID_CANCEL,
- wxU(_("&Cancel")) );
-
- /* Create notebook */
- notebook = new wxNotebook( panel, Notebook_Event );
-
-#if (!wxCHECK_VERSION(2,5,2))
- wxNotebookSizer *notebook_sizer = new wxNotebookSizer( notebook );
-#endif
-
- notebook->AddPage( FilePanel( notebook ), wxU(_("File")),
- i_access_method == FILE_ACCESS );
- notebook->AddPage( DiscPanel( notebook ), wxU(_("Disc")),
- i_access_method == DISC_ACCESS );
- notebook->AddPage( NetPanel( notebook ), wxU(_("Network")),
- i_access_method == NET_ACCESS );
-
- if( module_exists( "v4l" ) )
- {
- AutoBuiltPanel *autopanel =
- new AutoBuiltPanel( notebook, this, p_intf, p_module );
- input_tab_array.Add( autopanel );
- notebook->AddPage( autopanel, wxU( module_get_name(p_module, 0) ),
- i_access_method == CAPTURE_ACCESS );
- }
-
- if( module_exists( "pvr" ) )
- {
- AutoBuiltPanel *autopanel =
- new AutoBuiltPanel( notebook, this, p_intf, p_module );
- input_tab_array.Add( autopanel );
- notebook->AddPage( autopanel, wxU( module_get_name(p_module, 0) ),
- i_access_method == CAPTURE_ACCESS );
- }
-
- if( module_exists( "dvb" ) )
- {
- AutoBuiltPanel *autopanel =
- new AutoBuiltPanel( notebook, this, p_intf, p_module );
- input_tab_array.Add( autopanel );
- notebook->AddPage( autopanel, wxU( module_get_name(p_module, 0) ),
- i_access_method == CAPTURE_ACCESS );
- }
-
- if( module_exists( "dshow" ) )
- {
- AutoBuiltPanel *autopanel =
- new AutoBuiltPanel( notebook, this, p_intf, p_module );
- input_tab_array.Add( autopanel );
- notebook->AddPage( autopanel, wxU( module_get_name(p_module, 0) ),
- i_access_method == CAPTURE_ACCESS );
- }
-
- /* Update Disc panel */
- wxCommandEvent dummy_event;
- OnDiscTypeChange( dummy_event );
-
- /* Update Net panel */
- dummy_event.SetId( NetRadio1_Event );
- OnNetTypeChange( dummy_event );
-
- /* Update MRL */
- wxNotebookEvent event( wxEVT_NULL, 0, i_access_method );
- OnPageChange( event );
-
- /* Place everything in sizers */
- wxStdDialogButtonSizer *button_sizer = new wxStdDialogButtonSizer;
- button_sizer->AddButton( cancel_button );
- button_sizer->AddButton( ok_button );
- button_sizer->Realize();
- wxBoxSizer *main_sizer = new wxBoxSizer( wxVERTICAL );
- wxBoxSizer *panel_sizer = new wxBoxSizer( wxVERTICAL );
-#if (!wxCHECK_VERSION(2,5,2))
- panel_sizer->Add( notebook_sizer, 1, wxEXPAND | wxALL, 5 );
-#else
- panel_sizer->Add( notebook, 1, wxEXPAND | wxALL, 5 );
-#endif
- panel_sizer->Add( adv_sizer, 0, wxEXPAND | wxALL, 5 );
- panel_sizer->Add( static_line, 0, wxEXPAND | wxALL, 5 );
- panel_sizer->Add( button_sizer, 0, wxEXPAND | wxALL, 5 );
- panel_sizer->Layout();
- panel->SetSizerAndFit( panel_sizer );
- main_sizer->Add( panel, 1, wxGROW, 0 );
- main_sizer->Layout();
- SetSizerAndFit( main_sizer );
-}
-
-OpenDialog::~OpenDialog()
-{
- /* Clean up */
- delete file_dialog;
- delete sout_dialog;
- delete subsfile_dialog;
-}
-
-int OpenDialog::Show( int i_access_method, int i_arg )
-{
- notebook->SetSelection( i_access_method );
- int i_ret = wxDialog::Show();
- Raise();
- SetFocus();
- i_open_arg = i_arg;
- return i_ret;
-}
-
-int OpenDialog::Show()
-{
- int i_ret = wxDialog::Show();
- Raise();
- SetFocus();
- return i_ret;
-}
-
-/*****************************************************************************
- * Private methods.
- *****************************************************************************/
-wxPanel *OpenDialog::FilePanel( wxWindow* parent )
-{
- wxPanel *panel = new wxPanel( parent, -1, wxDefaultPosition,
- wxSize(200, 200) );
-
- wxBoxSizer *sizer = new wxBoxSizer( wxVERTICAL );
-
- /* Create browse file line */
- wxBoxSizer *file_sizer = new wxBoxSizer( wxHORIZONTAL );
-
- file_sizer->Add( new wxStaticText( panel, -1, wxU(_("Open:") ) ), 0,
- wxALL | wxALIGN_CENTER_VERTICAL, 5 );
-
- file_combo = new wxComboBox( panel, FileName_Event, wxT("") );
- wxButton *browse_button = new wxButton( panel, FileBrowse_Event,
- wxU(_("Browse...")) );
- file_sizer->Add( file_combo, 1, wxALL | wxALIGN_CENTER_VERTICAL, 5 );
- file_sizer->Add( browse_button, 0, wxALL | wxALIGN_CENTER_VERTICAL, 5 );
-
- /* Create Subtitles File checkox - button */
- wxFlexGridSizer *subtitles_sizer = new wxFlexGridSizer( 2, 1, 20 );
- subsfile_checkbox = new wxCheckBox( panel, SubsFileEnable_Event,
- wxU(_("Use a subtitles file")) );
- subsfile_checkbox->SetToolTip( wxU(_("Use an external subtitles file.")) );
- subtitles_sizer->Add( subsfile_checkbox, 0, wxALIGN_CENTER_VERTICAL |
- wxALL, 5 );
- subsfile_button = new wxButton( panel, SubsFileSettings_Event,
- wxU(_("Advanced Settings...")) );
- subsfile_button->Disable();
- subtitles_sizer->Add( subsfile_button, 1, wxALIGN_CENTER_VERTICAL |
- wxALL, 5 );
-
- /* Create subtitles file line */
- wxBoxSizer *subfile_sizer = new wxBoxSizer( wxHORIZONTAL );
-
- char *psz_subsfile = config_GetPsz( p_intf, "sub-file" );
- if( psz_subsfile && *psz_subsfile )
- {
- subsfile_checkbox->SetValue(TRUE);
- subsfile_button->Enable();
- subsfile_mrl.Add( wxString(wxT("sub-file=")) + wxL2U(psz_subsfile) );
- }
- if( !psz_subsfile ) psz_subsfile = strdup("");
- subfile_sizer->Add( new wxStaticText( panel, -1, wxU(_("File:") ) ),
- 0, wxALIGN_CENTER_VERTICAL | wxALL, 5 );
- subfile_combo = new wxComboBox( panel, SubFileName_Event,
- wxL2U( psz_subsfile ) );
- free( psz_subsfile );
- subbrowse_button = new wxButton( panel, SubFileBrowse_Event,
- wxU(_("Browse...")) );
- subfile_sizer->Add( subfile_combo, 1, wxALL | wxALIGN_CENTER_VERTICAL, 5 );
- subfile_sizer->Add( subbrowse_button, 0, wxALL |wxALIGN_CENTER_VERTICAL, 5 );
-
- subfile_combo->Disable();
- subbrowse_button->Disable();
-
- psz_subsfile = config_GetPsz( p_intf, "sub-file" );
- if( psz_subsfile && *psz_subsfile )
- {
- subfile_combo->Enable();
- subbrowse_button->Enable();
- }
-
- sizer->Add( file_sizer, 0, wxEXPAND | wxALL, 5 );
- sizer->Add( subtitles_sizer, 0, wxLEFT | wxRIGHT | wxTOP, 5 );
- sizer->Add( subfile_sizer, 0, wxEXPAND | wxLEFT | wxRIGHT| wxBOTTOM, 5 );
- panel->SetSizerAndFit( sizer );
- return panel;
-}
-
-wxPanel *OpenDialog::DiscPanel( wxWindow* parent )
-{
- wxPanel *panel = new wxPanel( parent, -1, wxDefaultPosition,
- wxSize(200, 200) );
-
- wxBoxSizer *sizer_row = new wxBoxSizer( wxVERTICAL );
- wxFlexGridSizer *sizer = new wxFlexGridSizer( 2, 3, 20 );
-
- static const wxString disc_type_array[] =
- {
- wxU(_("DVD (menus)")),
- wxU(_("DVD")),
- wxU(_("VCD")),
- wxU(_("Audio CD")),
- };
-
- disc_type = new wxRadioBox( panel, DiscType_Event, wxU(_("Disc type")),
- wxDefaultPosition, wxDefaultSize,
- WXSIZEOF(disc_type_array), disc_type_array,
- WXSIZEOF(disc_type_array), wxRA_SPECIFY_COLS );
-
-#ifdef HAVE_LIBCDIO
- disc_probe = new wxCheckBox( panel, DiscProbe_Event,
- wxU(_("Probe Disc(s)")) );
- disc_probe->SetToolTip( wxU(_("Probe for a DVD, VCD or audio CD. "
-"First try the Device name entered for the selected Disc type "
-"(DVD, DVD Menu, VCD, audio CD). If that doesn't find media, try any device "
-"for the Disc type. If that doesn't work, then try looking for CD-ROMs or "
-"DVD drives. The Disc type, Device name, and some parameter ranges are set "
-"based on media we find.")) );
-#endif
-
- sizer_row->Add( disc_type, i_disc_type_selection, wxEXPAND | wxALL, 5 );
-#ifdef HAVE_LIBCDIO
- sizer_row->Add( disc_probe, 0, wxEXPAND | wxALL );
-#endif
-
- wxStaticText *label = new wxStaticText( panel, -1, wxU(_("Device name")) );
- disc_device = new wxTextCtrl( panel, DiscDevice_Event, wxT(""),
- wxDefaultPosition, wxDefaultSize,
- wxTE_PROCESS_ENTER);
-
-#ifdef WIN32
- char psz_default_device[3] = {0};
- char *psz_forced;
-
- /* find the drive_name for the first cdrom drive,
- * which is probably "D:" and put the drive_name into
- * psz_default_device... */
- for( char drive_letter = 'A'; drive_letter <= 'Z'; ++drive_letter )
- {
- char drive_name[3] = {drive_letter, ':', 0};
- UINT type = GetDriveTypeA( drive_name );
- if( type == DRIVE_CDROM )
- {
- psz_default_device[0] = drive_letter;
- psz_default_device[1] = ':';
- break;
- }
- }
-
- psz_forced = config_GetPsz( p_intf, "dvd" );
-
- if( strlen(psz_default_device) > 0 &&
- ( !psz_forced || psz_forced && !*psz_forced ) )
- {
- if(disc_device)
- disc_device->SetValue( wxL2U(psz_default_device) );
- }
-#endif
-
- sizer->Add( label, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL );
- sizer->Add( disc_device, 1, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL );
-
- disc_title_label = new wxStaticText( panel, -1, wxU(_("Title")) );
- disc_title = new wxSpinCtrl( panel, DiscTitle_Event );
- sizer->Add( disc_title_label, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL );
- sizer->Add( disc_title, 1, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL );
-
- disc_chapter_label = new wxStaticText( panel, -1, wxU(_("Chapter")) );
- disc_chapter = new wxSpinCtrl( panel, DiscChapter_Event );
- sizer->Add( disc_chapter_label, 0,
- wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL );
- sizer->Add( disc_chapter, 1, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL );
-
- disc_sub_label = new wxStaticText( panel, -1, wxU(_("Subtitles track")) );
- disc_sub = new wxSpinCtrl( panel, DiscSub_Event );
- sizer->Add( disc_sub_label, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL );
- sizer->Add( disc_sub, 1, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL );
- disc_sub->SetRange( -1, 255 );
- i_disc_sub = config_GetInt( p_intf, "sub-track" );
- disc_sub->SetValue( i_disc_sub );
-
- disc_audio_label = new wxStaticText( panel, -1, wxU(_("Audio track")) );
- disc_audio = new wxSpinCtrl( panel, DiscAudio_Event );
- sizer->Add( disc_audio_label, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL );
- sizer->Add( disc_audio, 1, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL );
- disc_audio->SetRange( -1, 255 );
- i_disc_audio = config_GetInt( p_intf, "audio-track" );
- disc_audio->SetValue( i_disc_audio );
-
- sizer_row->Add( sizer, 0, wxEXPAND | wxALL, 5 );
-
- panel->SetSizerAndFit( sizer_row );
- return panel;
-}
-
-wxPanel *OpenDialog::NetPanel( wxWindow* parent )
-{
- int i;
- wxPanel *panel = new wxPanel( parent, -1, wxDefaultPosition,
- wxSize(200, 200) );
-
- wxBoxSizer *sizer_row = new wxBoxSizer( wxVERTICAL );
- wxFlexGridSizer *sizer = new wxFlexGridSizer( 2, 4, 20 );
-
- static const wxString net_type_array[] =
- {
- wxU(_("UDP/RTP")),
- wxU(_("UDP/RTP Multicast")),
- wxU(_("HTTP/HTTPS/FTP/MMS")),
- wxU(_("RTSP"))
- };
-
- for( i=0; i<4; i++ )
- {
- net_radios[i] = new wxRadioButton( panel, NetRadio1_Event + i,
- net_type_array[i],
- wxDefaultPosition, wxDefaultSize,
- wxRB_SINGLE );
-
- net_subpanels[i] = new wxPanel( panel, -1,
- wxDefaultPosition, wxDefaultSize );
- }
-
- /* Timeshift */
- net_timeshift = new wxCheckBox( panel, NetTimeshift_Event,
- wxU(_("Allow timeshifting")) );
-
- /* UDP/RTP row */
- wxFlexGridSizer *subpanel_sizer;
- wxStaticText *label;
- i_net_ports[0] = config_GetInt( p_intf, "server-port" );
- subpanel_sizer = new wxFlexGridSizer( 3, 1, 20 );
- label = new wxStaticText( net_subpanels[0], -1, wxU(_("Port")) );
- net_ports[0] = new wxSpinCtrl( net_subpanels[0], NetPort1_Event,
- wxString::Format(wxT("%d"), i_net_ports[0]),
- wxDefaultPosition, wxDefaultSize,
- wxSP_ARROW_KEYS,
- 0, 65535, i_net_ports[0] );
-
- subpanel_sizer->Add( label, 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL );
- subpanel_sizer->Add( net_ports[0], 1,
- wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL );
- net_ipv6 = new wxCheckBox( net_subpanels[0], NetForceIPv6_Event,
- wxU(_("Force IPv6")));
- subpanel_sizer->Add( net_ipv6, 0,
- wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL );
- net_subpanels[0]->SetSizerAndFit( subpanel_sizer );
- net_radios[0]->SetValue( TRUE );
-
- /* UDP/RTP Multicast row */
- subpanel_sizer = new wxFlexGridSizer( 4, 1, 20 );
- label = new wxStaticText( net_subpanels[1], -1, wxU(_("Address")) );
- net_addrs[1] = new wxTextCtrl( net_subpanels[1], NetAddr2_Event, wxT(""),
- wxDefaultPosition, wxDefaultSize,
- wxTE_PROCESS_ENTER);
- subpanel_sizer->Add( label, 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL );
- subpanel_sizer->Add( net_addrs[1], 1,
- wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL );
-
- label = new wxStaticText( net_subpanels[1], -1, wxU(_("Port")) );
- i_net_ports[1] = i_net_ports[0];
- net_ports[1] = new wxSpinCtrl( net_subpanels[1], NetPort2_Event,
- wxString::Format(wxT("%d"), i_net_ports[1]),
- wxDefaultPosition, wxDefaultSize,
- wxSP_ARROW_KEYS,
- 0, 65535, i_net_ports[1] );
-
- subpanel_sizer->Add( label, 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL );
- subpanel_sizer->Add( net_ports[1], 1,
- wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL );
- net_subpanels[1]->SetSizerAndFit( subpanel_sizer );
-
- /* HTTP and RTSP rows */
- for( i=2; i<4; i++ )
- {
- subpanel_sizer = new wxFlexGridSizer( 2, 1, 20 );
- label = new wxStaticText( net_subpanels[i], -1, wxU(_("URL")) );
- net_addrs[i] = new wxTextCtrl( net_subpanels[i], NetAddr1_Event + i,
- (i == 2) ? wxT("") : wxT("rtsp://"),
- wxDefaultPosition, wxSize( 200, -1 ),
- wxTE_PROCESS_ENTER);
- subpanel_sizer->Add( label, 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL );
- subpanel_sizer->Add( net_addrs[i], 1,
- wxEXPAND | wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL );
- net_subpanels[i]->SetSizerAndFit( subpanel_sizer );
- }
-
- /* Stuff everything into the main panel */
- for( i=0; i<4; i++ )
- {
- sizer->Add( net_radios[i], 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL |
- wxALL, 5 );
- sizer->Add( net_subpanels[i], 1, wxEXPAND | wxALIGN_LEFT |
- wxALIGN_CENTER_VERTICAL | wxALL, 5 );
- }
- sizer->Add( net_timeshift, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL |
- wxALL, 5 );
-
- sizer_row->Add( sizer, 0, wxEXPAND | wxALL, 5 );
-
- panel->SetSizerAndFit( sizer_row );
- return panel;
-}
-
-void OpenDialog::UpdateMRL()
-{
- UpdateMRL( i_current_access_method );
-}
-
-void OpenDialog::UpdateMRL( int i_access_method )
-{
- wxString mrltemp, caching_name;
-
- i_current_access_method = i_access_method;
-
- switch( i_access_method )
- {
- case FILE_ACCESS:
- mrltemp = file_combo->GetValue();
- caching_name = wxT("file-caching");
- break;
-
- case DISC_ACCESS:
- i_disc_type_selection = disc_type->GetSelection();
-
- switch ( i_disc_type_selection )
- {
- case 0: /* DVD with menus */
- case 1: /* DVD without menus */
- disc_device->SetToolTip( wxU(_("DVD device to use" ) ) );
- if( i_disc_type_selection == 0 )
- {
- mrltemp = wxT("dvd://") + disc_device->GetValue();
- caching_name = wxT("dvdnav-caching");
- }
- else
- {
- mrltemp = wxT("dvdsimple://") + disc_device->GetValue();
- caching_name = wxT("dvdread-caching");
- }
-
- if( i_disc_title > 0 )
- {
- mrltemp += wxString::Format( wxT("@%d"), i_disc_title );
-
- if( i_disc_chapter > 0 )
- mrltemp += wxString::Format( wxT(":%d"), i_disc_chapter );
- }
-
- if( i_disc_sub >= 0 )
- mrltemp += wxString::Format( wxT(" :sub-track=%d"),
- i_disc_sub );
- if( i_disc_audio >= 0 )
- mrltemp += wxString::Format( wxT(" :audio-track=%d"),
- i_disc_audio );
- break;
-
- case 2: /* VCD of some sort */
-#ifdef HAVE_VCDX
- disc_device->SetToolTip( wxU(_("Name of CD-ROM device "
- "to read Video CD from. If this field is left empty, we will scan "
- "for a CD-ROM with a VCD in it.")) );
- mrltemp = wxT("vcdx://") + disc_device->GetValue();
- if( i_disc_title > 0 )
- mrltemp += wxString::Format( wxT("@%c%d"),
- config_GetInt( p_intf, "vcdx-PBC" )
- ? 'P' : 'E', i_disc_title );
-#else
- disc_device->SetToolTip( wxU(_("CD-ROM device to use" ) ) );
- mrltemp = wxT("vcd://") + disc_device->GetValue();
- if( i_disc_title > 0 )
- mrltemp += wxString::Format( wxT("@%d"), i_disc_title );
-#endif
-
- if( i_disc_sub >= 0 )
- mrltemp += wxString::Format( wxT(" :sub-track=%d"),
- i_disc_sub );
-
- if( i_disc_audio >= 0 )
- mrltemp += wxString::Format( wxT(" :audio-track=%d"),
- i_disc_audio );
- caching_name = wxT("vcd-caching");
- break;
-
- case 3: /* CD-DA */
-#ifdef HAVE_CDDAX
- disc_device->SetToolTip( wxU(_("Name of CD-ROM device "
- "to read audio CD from. If this field is left empty, we will scan "
- "for a CD-ROM with an audio CD in it." )) );
- mrltemp = wxT("cddax://")
-#else
- disc_device->SetToolTip( wxU(_("CD-ROM device to use" ) ) ) ;
- mrltemp = wxT("cdda://")
-#endif
- + disc_device->GetValue();
- if( i_disc_title > 0 )
- mrltemp += wxString::Format( wxT("@%d"), i_disc_title );
-
- caching_name = wxT("cdda-caching");
- break;
-
- default:
- msg_Err( p_intf, "invalid selection (%d)",
- disc_type->GetSelection() );
- }
-
- break;
-
- case NET_ACCESS:
- switch( i_net_type )
- {
- case 0:
- mrltemp = wxT("udp://@");
- if ( net_ipv6->GetValue() )
- {
- mrltemp += wxT("[::]");
- }
- if( i_net_ports[0] !=
- config_GetInt( p_intf, "server-port" ) )
- {
- mrltemp += wxString::Format( wxT(":%d"), i_net_ports[0] );
- }
-
- caching_name = wxT("udp-caching");
- break;
-
- case 1:
- mrltemp = wxT("udp://@");
- if ((net_addrs[1]->GetLineText(0).Find (':') != -1)
- && (net_addrs[1]->GetLineText(0)[0u] != '['))
- {
- /* automatically adds '[' and ']' to IPv6 addresses */
- mrltemp += wxT("[") + net_addrs[1]->GetLineText(0)
- + wxT("]");
- }
- else
- {
- mrltemp += net_addrs[1]->GetLineText(0);
- }
- if( i_net_ports[1] != config_GetInt( p_intf, "server-port" ) )
- {
- mrltemp += wxString::Format( wxT(":%d"), i_net_ports[1] );
- }
-
- caching_name = wxT("udp-caching");
- break;
-
- case 2:
- /* http access */
- if( net_addrs[2]->GetLineText(0).Find(wxT("://")) == -1 )
- mrltemp = wxT("http://");
-
- mrltemp += net_addrs[2]->GetLineText(0);
- if( ! mrltemp.Left(4).CmpNoCase(wxT("http")) )
- caching_name = wxT("http-caching");
- else if( ! mrltemp.Left(3).CmpNoCase(wxT("mms")) )
- caching_name = wxT("mms-caching");
- else
- caching_name= wxT("ftp-caching");
- break;
-
- case 3:
- /* RTSP access */
- if( net_addrs[3]->GetLineText(0).Find(wxT("rtsp://")) != 0 )
- {
- mrltemp = wxT("rtsp://");
- }
- mrltemp += net_addrs[3]->GetLineText(0);
-
- caching_name = wxT("rtsp-caching");
- break;
- }
- if( net_timeshift->IsEnabled() && net_timeshift->IsChecked() )
- mrltemp += wxT(" :access-filter=timeshift");
- break;
-
- default:
- {
- int i_item = i_access_method - MAX_ACCESS;
-
- if( i_item < 0 || i_item >= (int)input_tab_array.GetCount() )
- break;
-
- AutoBuiltPanel *input_panel = input_tab_array.Item( i_item );
-
- mrltemp = input_panel->name + wxT("://");
-
- for( int i=0; i < (int)input_panel->config_array.GetCount(); i++ )
- {
- ConfigControl *control = input_panel->config_array.Item(i);
-
- mrltemp += wxT(" :");
-
- if( control->GetType() == CONFIG_ITEM_BOOL &&
- !control->GetIntValue() ) mrltemp += wxT("no-");
-
- mrltemp += control->GetName();
-
- switch( control->GetType() )
- {
- case CONFIG_ITEM_STRING:
- case CONFIG_ITEM_FILE:
- case CONFIG_ITEM_DIRECTORY:
- case CONFIG_ITEM_MODULE:
- mrltemp += wxT("=\"") + control->GetPszValue() + wxT("\"");
- break;
- case CONFIG_ITEM_INTEGER:
- mrltemp +=
- wxString::Format( wxT("=%i"), control->GetIntValue() );
- break;
- case CONFIG_ITEM_FLOAT:
- mrltemp +=
- wxString::Format(wxT("=%f"), control->GetFloatValue());
- break;
- }
- }
-
- if( input_panel->p_advanced_mrl_combo &&
- input_panel->p_advanced_mrl_combo->GetValue() )
- {
- mrltemp += wxT(" ") +
- input_panel->p_advanced_mrl_combo->GetValue();
- }
- }
- break;
- }
-
- if( caching_name.size() )
- {
- if( caching_value->IsEnabled() )
- {
- mrltemp += wxT(" :") + caching_name +
- wxString::Format( wxT("=%d"), i_caching );
- }
- else
- {
- int i_value = config_GetInt( p_intf, caching_name.mb_str(wxConvUTF8) );
- caching_value->SetValue( i_value );
- }
- }
-
- mrl_combo->SetValue( mrltemp );
-}
-
-/*****************************************************************************
- * Events methods.
- *****************************************************************************/
-void OpenDialog::OnOk( wxCommandEvent& WXUNUSED(event) )
-{
- mrl = SeparateEntries( mrl_combo->GetValue() );
- mrl_combo->Append( mrl_combo->GetValue() );
- if( mrl_combo->GetCount() > 10 ) mrl_combo->Delete( 0 );
- mrl_combo->SetSelection( mrl_combo->GetCount() - 1 );
-
- if( i_method == OPEN_STREAM )
- {
- if( IsModal() ) EndModal( wxID_OK );
- Hide();
- return;
- }
-
- /* Update the playlist */
- playlist_t *p_playlist = pl_Hold( p_intf );
- if( p_playlist == NULL ) return;
-
- for( int i = 0; i < (int)mrl.GetCount(); i++ )
- {
- bool b_start = !i && i_open_arg;
- input_item_t *p_input;
- char *psz_utf8;
-
- psz_utf8 = wxFromLocale( mrl[i] );
- p_input = input_item_New( p_intf, psz_utf8, NULL );
- wxLocaleFree( psz_utf8 );
-
- /* Insert options */
- while( i + 1 < (int)mrl.GetCount() &&
- ((const char *)mrl[i + 1].mb_str(wxConvUTF8))[0] == ':' )
- {
- psz_utf8 = wxFromLocale( mrl[i + 1] );
- input_item_AddOption( p_input, psz_utf8, VLC_INPUT_OPTION_TRUSTED );
- wxLocaleFree( psz_utf8 );
- i++;
- }
-
- /* Get the options from the subtitles dialog */
- if( subsfile_checkbox->IsChecked() && subsfile_mrl.GetCount() )
- {
- for( int j = 0; j < (int)subsfile_mrl.GetCount(); j++ )
- {
- psz_utf8 = wxFromLocale( subsfile_mrl[j] );
- input_item_AddOption( p_input, psz_utf8, VLC_INPUT_OPTION_TRUSTED );
- wxLocaleFree( psz_utf8 );
- }
- }
-
- /* Get the options from the stream output dialog */
- if( sout_checkbox->IsChecked() && sout_mrl.GetCount() )
- {
- for( int j = 0; j < (int)sout_mrl.GetCount(); j++ )
- {
- psz_utf8 = wxFromLocale( sout_mrl[j] );
- input_item_AddOption( p_input, psz_utf8, VLC_INPUT_OPTION_TRUSTED );
- wxLocaleFree( psz_utf8 );
- }
- }
-
- /* FIXME: playlist_AddInput() can fail */
- playlist_AddInput( p_playlist, p_input,
- PLAYLIST_APPEND | ( b_start ? PLAYLIST_GO : PLAYLIST_PREPARSE ),
- PLAYLIST_END, true, pl_Unlocked );
- vlc_gc_decref( p_input );
- }
- pl_Release( p_intf );
-
- Hide();
-
- if( IsModal() ) EndModal( wxID_OK );
-}
-
-void OpenDialog::OnCancel( wxCommandEvent& WXUNUSED(event) )
-{
- wxCloseEvent cevent;
- OnClose(cevent);
-}
-
-void OpenDialog::OnClose( wxCloseEvent& WXUNUSED(event) )
-{
- Hide();
-
- if( IsModal() ) EndModal( wxID_CANCEL );
-}
-
-void OpenDialog::OnPageChange( wxNotebookEvent& event )
-{
- UpdateMRL( event.GetSelection() );
-}
-
-void OpenDialog::OnMRLChange( wxCommandEvent& event )
-{
- //mrl = SeparateEntries( event.GetString() );
-}
-
-/*****************************************************************************
- * File panel event methods.
- *****************************************************************************/
-void OpenDialog::OnFilePanelChange( wxCommandEvent& WXUNUSED(event) )
-{
- UpdateMRL( FILE_ACCESS );
-}
-
-void OpenDialog::OnFileBrowse( wxCommandEvent& WXUNUSED(event) )
-{
- if( file_dialog == NULL )
- file_dialog = new wxFileDialog( this, wxU(_("Open File")),
- wxT(""), wxT(""), wxT("*"), wxOPEN | wxMULTIPLE );
-
- file_dialog->SetWildcard(wxU(_("All Files (*.*)|*"
- "|Sound Files (*.mp3, *.ogg, etc.)|" EXTENSIONS_AUDIO
- "|Video Files (*.avi, *.mpg, etc.)|" EXTENSIONS_VIDEO
- "|Playlist Files (*.m3u, *.pls, etc.)|" EXTENSIONS_PLAYLIST
- "|Subtitle Files (*.srt, *.sub, etc.)|" EXTENSIONS_SUBTITLE)));
-
- if( file_dialog && file_dialog->ShowModal() == wxID_OK )
- {
- wxArrayString paths;
- wxString path;
-
- file_dialog->GetPaths( paths );
-
- for( size_t i = 0; i < paths.GetCount(); i++ )
- {
- if( paths[i].Find( wxT(' ') ) >= 0 )
- path += wxT("\"") + paths[i] + wxT("\" ");
- else
- path += paths[i] + wxT(" ");
- }
-
- file_combo->SetValue( path );
- file_combo->Append( path );
- if( file_combo->GetCount() > 10 ) file_combo->Delete( 0 );
- UpdateMRL( FILE_ACCESS );
- }
-}
-
-void OpenDialog::OnSubFileBrowse( wxCommandEvent& WXUNUSED(event) )
-{
- wxFileDialog dialog( this, wxU(_("Open subtitles file")),
- wxT(""), wxT(""), wxT("*"), wxOPEN );
-
- if( dialog.ShowModal() == wxID_OK )
- {
- subfile_combo->SetValue( dialog.GetPath() );
- }
- wxCommandEvent event; OnSubFileChange( event );
-}
-
-void OpenDialog::OnSubFileChange( wxCommandEvent& WXUNUSED(event) )
-{
- if( subsfile_mrl.GetCount() != 0 )
- {
- subsfile_mrl.RemoveAt( 0 );
- subsfile_mrl.Insert( wxString(wxT("sub-file=")) + subfile_combo->GetValue() , 0 );
- }
- else
- {
- subsfile_mrl.Add( wxString(wxT("sub-file=")) + subfile_combo->GetValue() );
- }
-}
-
-/*****************************************************************************
- * Disc panel event methods.
- *****************************************************************************/
-void OpenDialog::OnDiscPanelChangeSpin( wxSpinEvent& event )
-{
- wxCommandEvent cevent;
- cevent.SetId(event.GetId());
- cevent.SetInt(event.GetPosition());
- OnDiscPanelChange(cevent);
-}
-
-void OpenDialog::OnDiscPanelChange( wxCommandEvent& event )
-{
- if( event.GetId() == DiscTitle_Event ) i_disc_title = event.GetInt();
- if( event.GetId() == DiscChapter_Event ) i_disc_chapter = event.GetInt();
- if( event.GetId() == DiscSub_Event ) i_disc_sub = event.GetInt();
- if( event.GetId() == DiscAudio_Event ) i_disc_audio = event.GetInt();
-
- UpdateMRL( DISC_ACCESS );
-}
-
-void OpenDialog::OnDiscDeviceChange( wxCommandEvent& event )
-{
- char *psz_device;
-
- switch( disc_type->GetSelection() )
- {
- case 3:
- psz_device = config_GetPsz( p_intf, "cd-audio" );
- break;
-
- case 2:
- psz_device = config_GetPsz( p_intf, "vcd" );
- break;
-
- default:
- psz_device = config_GetPsz( p_intf, "dvd" );
- break;
- }
-
- if ( !psz_device ) psz_device = "";
-
- if( disc_device->GetValue().Cmp( wxL2U( psz_device ) ) )
- {
- b_disc_device_changed = true;
- }
-
- UpdateMRL( DISC_ACCESS );
-}
-
-#ifdef HAVE_LIBCDIO
-
-/* Return true if *psz_drive is a drive with a DVD in it. A more complete
- check would see if the media looks like a *playable* DVD. This should
- go into libcdio.
- */
-static bool IsDVD(const char *psz_drive)
-{
- CdIo_t *p_cdio = cdio_open (psz_drive, DRIVER_UNKNOWN);
- if (p_cdio)
- {
- discmode_t discmode = cdio_get_discmode(p_cdio);
- cdio_destroy(p_cdio);
- return cdio_is_discmode_dvd(discmode);
- }
- return false;
-}
-
-
-/* Return a device that has a DVD in it. The caller needs to free
- the returned string.
-*/
-static char * ProbeDVD(const wxChar *device)
-{
- /*
- char **ppsz_cd_drives;
- const wxWX2MBbuf tmp_buf = wxConvCurrent->cWX2MB(device);
- char *psz_device = (char *) tmp_buf;
-
- if( IsDVD(psz_device) )
- {
- return strdup(psz_device);
- }
-
- ppsz_cd_drives = cdio_get_devices(DRIVER_DEVICE);
- if( ppsz_cd_drives )
- {
- char **c;
- for( c = ppsz_cd_drives; *c != NULL; c++ )
- {
- if( IsDVD(*c) )
- {
- char *psz_drive = strdup(*c);
- cdio_free_device_list(ppsz_cd_drives);
- return strdup(psz_drive);
- }
- }
- cdio_free_device_list(ppsz_cd_drives);
- }*/
- return NULL;
-}
-
-
-static char * ProbeDevice(char **ppsz_search_devices, cdio_fs_anal_t mask,
- bool b_any)
-{
- char **ppsz_devices;
-
- if( ppsz_search_devices && !ppsz_search_devices[0] )
- ppsz_search_devices = NULL;
-
- /* Start out trying the device that has been entered so far. */
- ppsz_devices = cdio_get_devices_with_cap(ppsz_search_devices, mask,
- b_any);
-
- if (ppsz_devices && *ppsz_devices)
- {
- char *psz_device = strdup(*ppsz_devices);
- cdio_free_device_list(ppsz_devices);
- return psz_device;
- }
-
- /* If there was no device specified on the first try, then give up
- now. Otherwise accept any CD-ROM in the class (e.g. VCD or DVD).
- */
- if( !ppsz_search_devices ) return NULL;
-
- ppsz_devices = cdio_get_devices_with_cap(NULL, mask, true);
-
- if (ppsz_devices && *ppsz_devices)
- {
- char *psz_device = strdup(*ppsz_devices);
- cdio_free_device_list(ppsz_devices);
- return psz_device;
- }
-
- return NULL;
-}
-
-
-/* Return a device that has a CD-DA in it. The caller needs to free
- the returned string.
-*/
-static char * ProbeCDDA(const wxChar *device)
-{
- /*
- char *ppsz_device[2];
- const wxWX2MBbuf tmp_buf = wxConvCurrent->cWX2MB(device);
- char *psz_device = (char *) tmp_buf;
- ppsz_device[0] = (device && *device) ? psz_device : NULL;
- ppsz_device[1] = NULL;
- return ProbeDevice(ppsz_device, CDIO_FS_AUDIO, false);
- */ return NULL;
-}
-
-/* Return a device that has a VCD in it. The caller needs to free
- the returned string.
-*/
-static char * ProbeVCD(const wxChar *device)
-{/*
- char *ppsz_device[2];
- const wxWX2MBbuf tmp_buf = wxConvCurrent->cWX2MB(device);
- char *psz_device = (char *) tmp_buf;
- ppsz_device[0] = (device && *device) ? psz_device : NULL;
- ppsz_device[1] = NULL;
- return ProbeDevice(ppsz_device,
- (CDIO_FS_ANAL_SVCD|CDIO_FS_ANAL_CVD|CDIO_FS_ANAL_VIDEOCD
- |CDIO_FS_UNKNOWN), true);
- */ return NULL;
-}
-
-
-/*
- Probe (find anywhere) a CD-DA, VCD, or a DVD.
- First try the device name that may have been entered for the "disc type"
- selected. If that doesn't work we try any device for the disc type.
- If that doesn't work, try looking for CD-ROMs or DVD drives. the
- disc type, device name and paramter ranges are set to whatever we find.
-*/
-void OpenDialog::OnDiscProbe( wxCommandEvent& WXUNUSED(event) )
-{
- wxCommandEvent dummy_event;
- char *psz_device = NULL;
- bool b_probed_DVD = false;
- bool b_probed_VCD = false;
- const int i_selection = disc_type->GetSelection();
-
- /* Reduce verbosity of cdio errors. */
- cdio_loglevel_default = CDIO_LOG_ERROR;
-
- retry:
- switch( disc_type->GetSelection() )
- {
-
- case SELECTION_DISC_TYPE_DVD_MENUS:
- case SELECTION_DISC_TYPE_DVD:
- /* If not a DVD then try for a VCD. If VCD fails it will
- try for a CD-DA. */
- if (!psz_device) psz_device = ProbeDVD(disc_device->GetValue());
- if (!psz_device)
- {
- b_probed_DVD = true;
- disc_type->SetSelection(SELECTION_DISC_TYPE_VCD);
- OnDiscTypeChange( dummy_event );
- goto retry;
- }
- disc_device->SetValue( wxL2U(psz_device) );
- break;
-
- case SELECTION_DISC_TYPE_VCD: /* VCD probe of some sort */
- if(!psz_device) psz_device = ProbeVCD(disc_device->GetValue());
- if( psz_device )
- {
-#ifdef HAVE_VCDX
-#if LIBVCD_VERSION_NUM > 23
- vcdinfo_obj_t *p_vcdinfo;
-
- /* Set LID or entry range accurately if possible. */
- if( vcdinfo_open(&p_vcdinfo, &psz_device, DRIVER_DEVICE,
- NULL) == VCDINFO_OPEN_VCD)
- {
- if (config_GetInt( p_intf, "vcdx-PBC" ))
- {
- /* Set largest LID. */;
- disc_title->SetRange( 0, vcdinfo_get_num_LIDs(p_vcdinfo) );
-
- }
- else
- {
- /* Set largest Entry */
- disc_title->SetRange( 0,
- vcdinfo_get_num_entries(p_vcdinfo)-1 );
- }
- vcdinfo_close(p_vcdinfo);
- }
-#endif /* LIBVCD_VERSION_NUM > 23 */
- disc_device->SetValue( wxL2U(psz_device) );
-#else
- CdIo_t *p_cdio = cdio_open (psz_device, DRIVER_UNKNOWN);
- disc_device->SetValue( wxL2U(psz_device) );
-
- /* Set track range accurately if possible. */
- if (p_cdio)
- {
- track_t i_last_track = cdio_get_last_track_num(p_cdio);
- disc_title->SetRange( 0, i_last_track-1 );
- }
- cdio_destroy(p_cdio);
-#endif
- break;
- }
-
- b_probed_VCD = true;
-
- /* Not a VCD. Try for a DVD unless we've been there before. */
- if( !b_probed_DVD && (psz_device = ProbeDVD(disc_device->GetValue())) )
- {
- disc_type->SetSelection(SELECTION_DISC_TYPE_DVD_MENUS);
- OnDiscTypeChange( dummy_event );
- goto retry;
- }
- b_probed_DVD = true;
-
- /* Couldn't find a VCD or DVD. See if we can find a CD-DA. */
- psz_device = ProbeCDDA(disc_device->GetValue());
- if( psz_device )
- {
- disc_type->SetSelection(SELECTION_DISC_TYPE_CDDA);
- OnDiscTypeChange( dummy_event );
- goto retry;
- }
-
- /* Couldn't find a VCD, DVD or CD-DA. Null out the Device name and
- set to original selection.
- */
- disc_device->SetValue( wxL2U("") );
- disc_type->SetSelection(i_selection);
- OnDiscTypeChange( dummy_event );
- break;
-
- case SELECTION_DISC_TYPE_CDDA:
- if(!psz_device) psz_device = ProbeCDDA(disc_device->GetValue());
- if( psz_device )
- {
- CdIo_t *p_cdio = cdio_open (psz_device, DRIVER_UNKNOWN);
- disc_device->SetValue( wxL2U(psz_device) );
- if (p_cdio)
- {
- track_t i_last_track = cdio_get_last_track_num(p_cdio);
- disc_title->SetRange( 0, i_last_track );
-#if 0
- MediaInsertCDDA( p_intf, p_cdio, i_last_track );
-#endif
- }
- cdio_destroy(p_cdio);
- break;
- }
-
- /* Not a CD-DA. Try for a DVD unless we've been there before. */
- if( !b_probed_DVD && (psz_device = ProbeDVD(disc_device->GetValue())) )
- {
- disc_type->SetSelection(SELECTION_DISC_TYPE_DVD_MENUS);
- OnDiscTypeChange( dummy_event );
- goto retry;
- }
-
- /* Couldn't find a CD-DA or DVD. See if we can find a VCD, unless
- we've tried that before. */
- if (!b_probed_VCD) psz_device = ProbeVCD(disc_device->GetValue());
- if( psz_device )
- {
- disc_type->SetSelection(SELECTION_DISC_TYPE_VCD);
- OnDiscTypeChange( dummy_event );
- goto retry;
- }
- disc_device->SetValue( wxL2U("") );
- break;
-
- default:
- msg_Err( p_intf, "invalid Disc type selection (%d)",
- disc_type->GetSelection() );
- break;
- }
-
- free( psz_device );
- disc_probe->SetValue(FALSE);
-
- UpdateMRL( DISC_ACCESS );
-}
-#endif /* HAVE_LIBCDIO */
-
-void OpenDialog::OnDiscTypeChange( wxCommandEvent& WXUNUSED(event) )
-{
- char *psz_device = NULL;
-
- switch( disc_type->GetSelection() )
- {
-
- case SELECTION_DISC_TYPE_DVD_MENUS:
- case SELECTION_DISC_TYPE_DVD:
- disc_sub->Enable(); disc_sub_label->Enable();
- disc_audio->Enable(); disc_audio_label->Enable();
- disc_chapter->Enable(); disc_chapter_label->Enable();
- disc_title_label->SetLabel ( wxU(_("Title")) );
- psz_device = config_GetPsz( p_intf, "dvd" );
- if( !b_disc_device_changed )
- {
- if( psz_device ) disc_device->SetValue( wxL2U(psz_device) );
- else disc_device->SetValue( wxT("") );
- }
- disc_title->SetRange( 0, 255 );
- disc_sub->SetRange( -1, 31 ); // up to 32 subtitles -1: no subtitle
- disc_audio->SetRange( 0, 7 ); // up to 8 audio channels
- disc_chapter->SetRange( 0, 255 );
- disc_title->SetToolTip( wxU(_("Title number.")) );
- disc_sub->SetToolTip( wxU(_(
- "DVDs can have up to 32 subtitles numbered 0..31. "
- "Note this is not the same thing as a subtitle name (e.g. 'en'). "
- "If a value -1 is used, no subtitle will be shown." )) );
- disc_audio->SetToolTip( wxU(_("Audio track number. "
- "DVDs can have up to 8 audio tracks numbered 0..7."
- )) );
- break;
-
- case SELECTION_DISC_TYPE_VCD:
- disc_sub->Enable(); disc_sub_label->Enable();
- disc_audio->Enable(); disc_audio_label->Enable();
- disc_chapter->Disable(); disc_chapter_label->Disable();
- psz_device = config_GetPsz( p_intf, "vcd" );
- if( !b_disc_device_changed )
- {
- if( psz_device ) disc_device->SetValue( wxL2U(psz_device) );
- else disc_device->SetValue( wxT("") );
- }
-
-#ifdef HAVE_VCDX
- if (config_GetInt( p_intf, "vcdx-PBC" ))
- {
- disc_title_label->SetLabel ( wxT("Playback LID") );
- disc_title->SetToolTip( wxU(_(
- "Playback control (PBC) usually starts with number 1." )) );
- }
- else
- {
- disc_title_label->SetLabel ( wxT("Entry") );
- disc_title->SetToolTip( wxU(_(
- "The first entry (the beginning of the first MPEG track) is 0." )) );
- }
-
-#else
- disc_title_label->SetLabel ( wxU(_("Track")) );
- disc_title->SetToolTip( wxU(_("Track number.")) );
-#endif
- disc_title->SetRange( 0, 99 ); // only 100 tracks allowed on VCDs
- disc_sub->SetRange( -1, 3 ); // up to 4 subtitles -1 = no subtitle
- disc_audio->SetRange( 0, 1 ); // up to 2 audio tracks
- disc_sub->SetToolTip( wxU(_(
- "SVCDs can have up to 4 subtitles numbered 0..3. "
- "If a value -1 is used, no subtitle will be shown." )) );
- disc_audio->SetToolTip( wxU(_("Audio track number. "
- "VCDs can have up to 2 audio tracks numbered 0 or 1. "
- )) );
- break;
-
- case SELECTION_DISC_TYPE_CDDA:
- disc_sub->Disable(); disc_sub_label->Disable();
- disc_chapter->Disable(); disc_chapter_label->Disable();
- disc_audio->Disable(); disc_audio_label->Disable();
- disc_title_label->SetLabel ( wxU(_("Track")) );
-#ifdef HAVE_CDDAX
- disc_title->SetToolTip( wxU(_(
- "Audio CDs can have up to 100 tracks, the first track is usually 1. "
- "If 0 is given, then all tracks are played.")) );
-#else
- disc_title->SetToolTip( wxU(_(
- "Audio CDs can have up to 100 tracks, the first track is usually 1."
- )) );
-#endif
- psz_device = config_GetPsz( p_intf, "cd-audio" );
- if( !b_disc_device_changed )
- {
- if( psz_device ) disc_device->SetValue( wxL2U(psz_device) );
- else disc_device->SetValue( wxT("") );
- }
-
- /* There are at most 100 tracks in a CD-DA */
- disc_title->SetRange( 0, 100 );
- break;
-
- default:
- msg_Err( p_intf, "invalid Disc type selection (%d)",
- disc_type->GetSelection() );
- break;
- }
-
- disc_title->SetValue( 0 ); i_disc_title = 0;
- disc_chapter->SetValue( 0 ); i_disc_chapter = 0;
-
- free( psz_device );
-
- UpdateMRL( DISC_ACCESS );
-}
-
-/*****************************************************************************
- * Net panel event methods.
- *****************************************************************************/
-void OpenDialog::OnNetPanelChangeSpin( wxSpinEvent& event )
-{
- wxCommandEvent cevent;
- cevent.SetId(event.GetId());
- cevent.SetInt(event.GetPosition());
- OnNetPanelChange(cevent);
-}
-
-void OpenDialog::OnNetPanelChange( wxCommandEvent& event )
-{
- if( event.GetId() >= NetPort1_Event && event.GetId() <= NetPort3_Event )
- {
- i_net_ports[event.GetId() - NetPort1_Event] = event.GetInt();
- }
-
- UpdateMRL( NET_ACCESS );
-}
-
-void OpenDialog::OnNetTypeChange( wxCommandEvent& event )
-{
- int i;
-
- i_net_type = event.GetId() - NetRadio1_Event;
-
- for(i=0; i<4; i++)
- {
- net_radios[i]->SetValue( event.GetId() == (NetRadio1_Event+i) );
- net_subpanels[i]->Enable( event.GetId() == (NetRadio1_Event+i) );
- }
- /* UDP Unicast or multicast -> timeshift */
- if( i_net_type == 0 || i_net_type == 1 )
- net_timeshift->Enable();
- else
- net_timeshift->Disable();
-
- UpdateMRL( NET_ACCESS );
-}
-
-/*****************************************************************************
- * Subtitles file event methods.
- *****************************************************************************/
-void OpenDialog::OnSubsFileEnable( wxCommandEvent& event )
-{
- subsfile_button->Enable( event.GetInt() != 0 );
- subbrowse_button->Enable( event.GetInt() != 0 );
- subfile_combo->Enable( event.GetInt() != 0 );
-}
-
-void OpenDialog::OnSubsFileSettings( wxCommandEvent& WXUNUSED(event) )
-{
- /* Show/hide the open dialog */
- if( subsfile_dialog == NULL )
- subsfile_dialog = new SubsFileDialog( p_intf, this );
-
- if( subsfile_dialog && subsfile_dialog->ShowModal() == wxID_OK )
- {
- subsfile_mrl.Empty();
- subsfile_mrl.Add( wxString(wxT("sub-file=")) + subfile_combo->GetValue() );
- if( subsfile_dialog->encoding_combo )
- {
- subsfile_mrl.Add( wxString(wxT("subsdec-encoding=")) +
- subsfile_dialog->encoding_combo->GetValue() );
- }
- if( subsfile_dialog->align_combo )
- {
- subsfile_mrl.Add( wxString::Format(wxT("subsdec-align=%i"),
- (int)subsfile_dialog->align_combo->GetClientData(
- subsfile_dialog->align_combo->GetSelection()) ) );
- }
- if( subsfile_dialog->size_combo )
- {
- subsfile_mrl.Add( wxString::Format( wxT("freetype-rel-fontsize=%i"),
- (int)subsfile_dialog->size_combo->GetClientData(
- subsfile_dialog->size_combo->GetSelection()) ) );
- }
- subsfile_mrl.Add( wxString( wxT("sub-fps="))+
- subsfile_dialog->fps_ctrl->GetValue() );
- subsfile_mrl.Add( wxString::Format( wxT("sub-delay=%i"),
- subsfile_dialog->delay_spinctrl->GetValue() ) );
- }
-}
-
-/*****************************************************************************
- * Stream output event methods.
- *****************************************************************************/
-void OpenDialog::OnSoutEnable( wxCommandEvent& event )
-{
- sout_button->Enable( event.GetInt() != 0 );
-}
-
-void OpenDialog::OnSoutSettings( wxCommandEvent& WXUNUSED(event) )
-{
- /* Show/hide the open dialog */
- if( sout_dialog == NULL )
- sout_dialog = new SoutDialog( p_intf, this );
-
- if( sout_dialog && sout_dialog->ShowModal() == wxID_OK )
- {
- sout_mrl = sout_dialog->GetOptions();
- }
-}
-
-/*****************************************************************************
- * Caching event methods.
- *****************************************************************************/
-void OpenDialog::OnCachingEnable( wxCommandEvent& event )
-{
- caching_value->Enable( event.GetInt() != 0 );
- i_caching = caching_value->GetValue();
- UpdateMRL();
-}
-
-void OpenDialog::OnCachingChangeSpin( wxSpinEvent& event )
-{
- wxCommandEvent cevent;
- OnCachingChange(cevent);
-}
-
-void OpenDialog::OnCachingChange( wxCommandEvent& event )
-{
- i_caching = event.GetInt();
- UpdateMRL();
-}
-
-/*****************************************************************************
- * Utility functions.
- *****************************************************************************/
-wxArrayString SeparateEntries( wxString entries )
-{
- bool b_quotes_mode = false;
-
- wxArrayString entries_array;
- wxString entry;
-
- wxStringTokenizer token( entries, wxT(" \t\r\n\""), wxTOKEN_RET_DELIMS );
-
- while( token.HasMoreTokens() )
- {
- entry += token.GetNextToken();
-
- if( entry.IsEmpty() ) continue;
-
- if( !b_quotes_mode && entry.Last() == wxT('\"') )
- {
- /* Enters quotes mode */
- entry.RemoveLast();
- b_quotes_mode = true;
- }
- else if( b_quotes_mode && entry.Last() == wxT('\"') )
- {
- /* Finished the quotes mode */
- entry.RemoveLast();
- b_quotes_mode = false;
- }
- else if( !b_quotes_mode && entry.Last() != wxT('\"') )
- {
- /* we found a non-quoted standalone string */
- if( token.HasMoreTokens() ||
- entry.Last() == wxT(' ') || entry.Last() == wxT('\t') ||
- entry.Last() == wxT('\r') || entry.Last() == wxT('\n') )
- entry.RemoveLast();
- if( !entry.IsEmpty() ) entries_array.Add( entry );
- entry.Empty();
- }
- else
- {;}
- }
-
- if( !entry.IsEmpty() ) entries_array.Add( entry );
-
- return entries_array;
-}
+++ /dev/null
-/*****************************************************************************
- * open.hpp: Headers for the Open dialog
- *****************************************************************************
- * Copyright (C) 1999-2005 the VideoLAN team
- * $Id$
- *
- * Authors: Gildas Bazin <gbazin@videolan.org>
- *
- * 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., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
- *****************************************************************************/
-
-#ifndef _WXVLC_OPEN_H_
-#define _WXVLC_OPEN_H_
-
-#include "wxwidgets.hpp"
-
-#include <wx/spinctrl.h>
-#include <wx/notebook.h>
-
-class AutoBuiltPanel;
-namespace wxvlc
-{
- class SubsFileDialog;
- class SoutDialog;
- WX_DEFINE_ARRAY(AutoBuiltPanel *, ArrayOfAutoBuiltPanel);
-
- class OpenDialog: public wxDialog
- {
-
-public:
- /* Constructor */
- OpenDialog( intf_thread_t *p_intf, wxWindow *p_parent,
- int i_access_method, int i_arg = 0 );
-
- /* Extended Contructor */
- OpenDialog( intf_thread_t *p_intf, wxWindow *p_parent,
- int i_access_method, int i_arg = 0 , int _i_method = 0 );
- virtual ~OpenDialog();
-
- int Show();
- int Show( int i_access_method, int i_arg = 0 );
-
- void UpdateMRL();
- void UpdateMRL( int i_access_method );
-
- wxArrayString mrl;
-
-private:
- wxPanel *FilePanel( wxWindow* parent );
- wxPanel *DiscPanel( wxWindow* parent );
- wxPanel *NetPanel( wxWindow* parent );
-
- ArrayOfAutoBuiltPanel input_tab_array;
-
- /* Event handlers (these functions should _not_ be virtual) */
- void OnOk( wxCommandEvent& event );
- void OnCancel( wxCommandEvent& event );
- void OnClose( wxCloseEvent& event );
-
- void OnPageChange( wxNotebookEvent& event );
- void OnMRLChange( wxCommandEvent& event );
-
- /* Event handlers for the file page */
- void OnFilePanelChange( wxCommandEvent& event );
- void OnFileBrowse( wxCommandEvent& event );
- void OnSubFileBrowse( wxCommandEvent& event );
- void OnSubFileChange( wxCommandEvent& event );
-
- /* Event handlers for the disc page */
- void OnDiscPanelChangeSpin( wxSpinEvent& event );
- void OnDiscPanelChange( wxCommandEvent& event );
- void OnDiscTypeChange( wxCommandEvent& event );
-#ifdef HAVE_LIBCDIO
- void OnDiscProbe( wxCommandEvent& event );
-#endif
- void OnDiscDeviceChange( wxCommandEvent& event );
-
- /* Event handlers for the net page */
- void OnNetPanelChangeSpin( wxSpinEvent& event );
- void OnNetPanelChange( wxCommandEvent& event );
- void OnNetTypeChange( wxCommandEvent& event );
-
- /* Event handlers for the stream output */
- void OnSubsFileEnable( wxCommandEvent& event );
- void OnSubsFileSettings( wxCommandEvent& WXUNUSED(event) );
-
- /* Event handlers for the stream output */
- void OnSoutEnable( wxCommandEvent& event );
- void OnSoutSettings( wxCommandEvent& WXUNUSED(event) );
-
- /* Event handlers for the caching option */
- void OnCachingEnable( wxCommandEvent& event );
- void OnCachingChange( wxCommandEvent& event );
- void OnCachingChangeSpin( wxSpinEvent& event );
-
- DECLARE_EVENT_TABLE();
-
- intf_thread_t *p_intf;
- wxWindow *p_parent;
- int i_current_access_method;
- int i_disc_type_selection;
-
- int i_method; /* Normal or for the stream dialog ? */
- int i_open_arg;
-
- wxComboBox *mrl_combo;
- wxNotebook *notebook;
-
- /* Controls for the file panel */
- wxComboBox *file_combo;
- wxComboBox *subfile_combo;
- wxFileDialog *file_dialog;
-
- /* Controls for the disc panel */
- wxRadioBox *disc_type;
- wxCheckBox *disc_probe;
- wxTextCtrl *disc_device;
- wxSpinCtrl *disc_title; int i_disc_title;
- wxSpinCtrl *disc_chapter; int i_disc_chapter;
- wxSpinCtrl *disc_sub; int i_disc_sub;
- wxSpinCtrl *disc_audio; int i_disc_audio;
-
- /* The media equivalent name for a DVD names. For example,
- * "Title", is "Track" for a CD-DA */
- wxStaticText *disc_title_label;
- wxStaticText *disc_chapter_label;
- wxStaticText *disc_sub_label;
- wxStaticText *disc_audio_label;
-
- /* Indicates if the disc device control was modified */
- bool b_disc_device_changed;
-
- /* Controls for the net panel */
- wxRadioBox *net_type;
- int i_net_type;
- wxPanel *net_subpanels[4];
- wxRadioButton *net_radios[4];
- wxSpinCtrl *net_ports[4];
- int i_net_ports[4];
- wxTextCtrl *net_addrs[4];
- wxCheckBox *net_timeshift;
- wxCheckBox *net_ipv6;
-
- /* Controls for the subtitles file */
- wxButton *subsfile_button;
- wxButton *subbrowse_button;
- wxCheckBox *subsfile_checkbox;
- SubsFileDialog *subsfile_dialog;
- wxArrayString subsfile_mrl;
-
- /* Controls for the stream output */
- wxButton *sout_button;
- wxCheckBox *sout_checkbox;
- SoutDialog *sout_dialog;
- wxArrayString sout_mrl;
-
- /* Controls for the caching options */
- wxCheckBox *caching_checkbox;
- wxSpinCtrl *caching_value;
- int i_caching;
-};
-
-};
-
-enum
-{
- FILE_ACCESS = 0,
- DISC_ACCESS,
- NET_ACCESS,
-
- /* Auto-built panels */
- CAPTURE_ACCESS
-};
-#define MAX_ACCESS CAPTURE_ACCESS
-
-
-#endif
+++ /dev/null
-/*****************************************************************************
- * playlist.cpp : wxWindows plugin for vlc
- *****************************************************************************
- * Copyright (C) 2000-2005 the VideoLAN team
- * $Id$
- *
- * Authors: Olivier Teulière <ipkiss@via.ecp.fr>
- * Clément Stenac <zorglub@videolan.org>
- *
- * 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., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
- *****************************************************************************/
-
-/*****************************************************************************
- * Preamble
- *****************************************************************************/
-#include "dialogs/playlist.hpp"
-#include "dialogs/iteminfo.hpp"
-
-#include "bitmaps/shuffle.xpm"
-#include "bitmaps/repeat.xpm"
-#include "bitmaps/loop.xpm"
-
-#include "bitmaps/type_unknown.xpm"
-#include "bitmaps/type_afile.xpm"
-#include "bitmaps/type_vfile.xpm"
-#include "bitmaps/type_net.xpm"
-#include "bitmaps/type_card.xpm"
-#include "bitmaps/type_disc.xpm"
-#include "bitmaps/type_cdda.xpm"
-#include "bitmaps/type_directory.xpm"
-#include "bitmaps/type_playlist.xpm"
-#include "bitmaps/type_node.xpm"
-
-#include <wx/dynarray.h>
-#include <wx/imaglist.h>
-
-#include <vlc_meta.h>
-#include "vlc_charset.h"
-
-#define HELP_SHUFFLE N_( "Shuffle" )
-#define HELP_LOOP N_( "Repeat All" )
-#define HELP_REPEAT N_( "Repeat One" )
-
-namespace wxvlc {
-/* Callback prototype */
-static int PlaylistChanged( vlc_object_t *, const char *,
- vlc_value_t, vlc_value_t, void * );
-static int PlaylistNext( vlc_object_t *, const char *,
- vlc_value_t, vlc_value_t, void * );
-static int ItemChanged( vlc_object_t *, const char *,
- vlc_value_t, vlc_value_t, void * );
-static int ItemAppended( vlc_object_t *p_this, const char *psz_variable,
- vlc_value_t oval, vlc_value_t nval, void *param );
-static int ItemDeleted( vlc_object_t *p_this, const char *psz_variable,
- vlc_value_t oval, vlc_value_t nval, void *param );
-
-/*****************************************************************************
- * Event Table.
- *****************************************************************************/
-
-/* IDs for the controls and the menu commands */
-enum
-{
- /* menu items */
- AddFile_Event = 1,
- AddDir_Event,
- AddMRL_Event,
- Close_Event,
- Open_Event,
- Save_Event,
-
- SortTitle_Event,
- RSortTitle_Event,
- Randomize_Event,
-
- DeleteSelection_Event,
- Random_Event,
- Loop_Event,
- Repeat_Event,
-
- PopupPlay_Event,
- PopupPlayThis_Event,
- PopupPreparse_Event,
- PopupSort_Event,
- PopupDel_Event,
- PopupInfo_Event,
- PopupAddNode_Event,
-
- SearchText_Event,
- Search_Event,
-
- /* controls */
- Source_Event,
- TreeCtrl_Event,
-
- Browse_Event, /* For export playlist */
-
- /* custom events */
- UpdateItem_Event,
- AppendItem_Event,
- RemoveItem_Event,
-
- MenuDummy_Event = wxID_HIGHEST + 999,
-
- FirstView_Event = wxID_HIGHEST + 1000,
- CategoryView_Event, OneLevelView_Event,
- LastView_Event = wxID_HIGHEST + 1100,
-
- FirstSD_Event = wxID_HIGHEST + 2000,
- LastSD_Event = wxID_HIGHEST + 2100,
-};
-
-DEFINE_LOCAL_EVENT_TYPE( wxEVT_PLAYLIST );
-
-BEGIN_EVENT_TABLE(Playlist, wxFrame)
- EVT_SIZE(Playlist::OnSize)
-
- /* Menu events */
- EVT_MENU(AddFile_Event, Playlist::OnAddFile)
- EVT_MENU(AddDir_Event, Playlist::OnAddDir)
- EVT_MENU(AddMRL_Event, Playlist::OnAddMRL)
- EVT_MENU(Close_Event, Playlist::OnMenuClose)
- EVT_MENU(Open_Event, Playlist::OnOpen)
- EVT_MENU(Save_Event, Playlist::OnSave)
-
- EVT_MENU(SortTitle_Event, Playlist::OnSort)
- EVT_MENU(RSortTitle_Event, Playlist::OnSort)
-
- EVT_MENU(Randomize_Event, Playlist::OnSort)
-
- EVT_MENU(DeleteSelection_Event, Playlist::OnDeleteSelection)
-
- EVT_MENU_OPEN( Playlist::OnMenuOpen )
- EVT_MENU( -1, Playlist::OnMenuEvent )
-
- EVT_TOOL(Random_Event, Playlist::OnRandom)
- EVT_TOOL(Repeat_Event, Playlist::OnRepeat)
- EVT_TOOL(Loop_Event, Playlist::OnLoop)
-
- /* Popup events */
- EVT_MENU( PopupPlay_Event, Playlist::OnPopupPlay)
- EVT_MENU( PopupPlayThis_Event, Playlist::OnPopupPlay)
- EVT_MENU( PopupPreparse_Event, Playlist::OnPopupPreparse)
- EVT_MENU( PopupSort_Event, Playlist::OnPopupSort)
- EVT_MENU( PopupDel_Event, Playlist::OnPopupDel)
- EVT_MENU( PopupInfo_Event, Playlist::OnPopupInfo)
- EVT_MENU( PopupAddNode_Event, Playlist::OnPopupAddNode)
-
- /* Source selector */
- EVT_LIST_ITEM_SELECTED( Source_Event, Playlist::OnSourceSelected )
- /* Tree control events */
- EVT_TREE_ITEM_ACTIVATED( TreeCtrl_Event, Playlist::OnActivateItem )
- EVT_TREE_KEY_DOWN( -1, Playlist::OnKeyDown )
- EVT_TREE_BEGIN_DRAG( TreeCtrl_Event, Playlist::OnDragItemBegin )
- EVT_TREE_END_DRAG( TreeCtrl_Event, Playlist::OnDragItemEnd )
-
- EVT_CONTEXT_MENU( Playlist::OnPopup )
-
- /* Button events */
- EVT_BUTTON( Search_Event, Playlist::OnSearch)
- EVT_BUTTON( Save_Event, Playlist::OnSave)
-
- /*EVT_TEXT( SearchText_Event, Playlist::OnSearchTextChange )*/
- EVT_TEXT_ENTER( SearchText_Event, Playlist::OnSearch )
-
- /* Custom events */
- EVT_COMMAND(-1, wxEVT_PLAYLIST, Playlist::OnPlaylistEvent)
-
- /* Special events : we don't want to destroy the window when the user
- * clicks on (X) */
- EVT_CLOSE(Playlist::OnClose)
-END_EVENT_TABLE()
-
-/*****************************************************************************
- * PlaylistItem class
- ****************************************************************************/
-class PlaylistItem : public wxTreeItemData
-{
-public:
- PlaylistItem( playlist_item_t *p_item ) : wxTreeItemData()
- {
- i_id = p_item->i_id;
- i_input_id = p_item->p_input->i_id;
- }
-protected:
- int i_input_id;
- int i_id;
-friend class Playlist;
-friend class PlaylistFileDropTarget;
-};
-
-/*****************************************************************************
- * Constructor.
- *****************************************************************************/
-Playlist::Playlist( intf_thread_t *_p_intf, wxWindow *p_parent ):
- wxFrame( p_parent, -1, wxU(_("Playlist")), wxDefaultPosition,
- wxSize(500,300), wxDEFAULT_FRAME_STYLE )
-{
- vlc_value_t val;
-
- /* Initializations */
- p_intf = _p_intf;
- pp_sds = NULL;
- i_update_counter = 0;
- i_sort_mode = MODE_NONE;
- b_need_update = false;
- i_items_to_append = 0;
- p_playlist = pl_Hold( p_intf );
- if( p_playlist == NULL ) return;
-
- SetIcon( *p_intf->p_sys->p_icon );
-
- p_view_menu = NULL;
- p_sd_menu = SDMenu();
-
- p_current_viewroot = p_playlist->p_root_category;
- p_current_treeroot = NULL;
-
- i_title_sorted = 0;
- i_group_sorted = 0;
- i_duration_sorted = 0;
-
- var_Create( p_intf, "random", VLC_VAR_BOOL | VLC_VAR_DOINHERIT );
- var_Create( p_intf, "loop", VLC_VAR_BOOL | VLC_VAR_DOINHERIT );
- var_Create( p_intf, "repeat", VLC_VAR_BOOL | VLC_VAR_DOINHERIT );;
-
- /* Create our "Manage" menu */
- wxMenu *manage_menu = new wxMenu;
- manage_menu->Append( AddFile_Event, wxU(_("&Simple Add File...")) );
- manage_menu->Append( AddDir_Event, wxU(_("Add &Directory...")) );
- manage_menu->Append( AddMRL_Event, wxU(_("&Add URL...")) );
- manage_menu->AppendSeparator();
- manage_menu->Append( MenuDummy_Event, wxU(_("Services Discovery")),
- p_sd_menu );
- manage_menu->AppendSeparator();
- manage_menu->Append( Open_Event, wxU(_("&Open Playlist...")) );
- manage_menu->Append( Save_Event, wxU(_("&Save Playlist...")) );
- manage_menu->AppendSeparator();
- manage_menu->Append( Close_Event, wxU(_("&Close")) );
-
- /* Create our "Sort" menu */
- wxMenu *sort_menu = new wxMenu;
- sort_menu->Append( SortTitle_Event, wxU(_("Sort by &Title")) );
- sort_menu->Append( RSortTitle_Event, wxU(_("&Reverse Sort by Title")) );
- sort_menu->AppendSeparator();
- sort_menu->Append( Randomize_Event, wxU(_("&Shuffle")) );
-
- /* Create our "Selection" menu */
- wxMenu *selection_menu = new wxMenu;
- selection_menu->Append( DeleteSelection_Event, wxU(_("D&elete")) );
-
- /* Create our "View" menu */
- ViewMenu();
-
- /* Append the freshly created menus to the menu bar */
- wxMenuBar *menubar = new wxMenuBar();
- menubar->Append( manage_menu, wxU(_("&Manage")) );
- menubar->Append( sort_menu, wxU(_("S&ort")) );
- menubar->Append( selection_menu, wxU(_("&Selection")) );
- menubar->Append( p_view_menu, wxU(_("&View items") ) );
-
- /* Attach the menu bar to the frame */
- SetMenuBar( menubar );
-
- /* Create the popup menu */
- node_popup = new wxMenu;
- node_popup->Append( PopupPlay_Event, wxU(_("Play")) );
- node_popup->Append( PopupPlayThis_Event, wxU(_("Play this Branch")) );
- node_popup->Append( PopupPreparse_Event, wxU(_("Preparse")) );
- node_popup->Append( PopupSort_Event, wxU(_("Sort this Branch")) );
- node_popup->Append( PopupDel_Event, wxU(_("Delete")) );
- node_popup->Append( PopupInfo_Event, wxU(_("Info")) );
- node_popup->Append( PopupAddNode_Event, wxU(_("Add Node")) );
-
- item_popup = new wxMenu;
- item_popup->Append( PopupPlay_Event, wxU(_("Play")) );
- item_popup->Append( PopupPreparse_Event, wxU(_("Preparse")) );
- item_popup->Append( PopupDel_Event, wxU(_("Delete")) );
- item_popup->Append( PopupInfo_Event, wxU(_("Info")) );
-
- /* Create a panel to put everything in */
- wxPanel *playlist_panel = new wxPanel( this, -1 );
- playlist_panel->SetAutoLayout( TRUE );
-
- /* Create the toolbar */
- wxToolBar *toolbar =
- CreateToolBar( wxTB_HORIZONTAL | wxTB_FLAT );
-
- /* Create the random tool */
- toolbar->AddTool( Random_Event, wxT(""), wxBitmap(shuffle_on_xpm),
- wxBitmap(shuffle_on_xpm), wxITEM_CHECK,
- wxU(_(HELP_SHUFFLE) ) );
- var_Get( p_intf, "random", &val );
- toolbar->ToggleTool( Random_Event, val.b_bool );
-
- /* Create the Loop tool */
- toolbar->AddTool( Loop_Event, wxT(""), wxBitmap( loop_xpm),
- wxBitmap( loop_xpm), wxITEM_CHECK,
- wxU(_(HELP_LOOP ) ) );
- var_Get( p_intf, "loop", &val );
- toolbar->ToggleTool( Loop_Event, val.b_bool );
-
- /* Create the Repeat one checkbox */
- toolbar->AddTool( Repeat_Event, wxT(""), wxBitmap( repeat_xpm),
- wxBitmap( repeat_xpm), wxITEM_CHECK,
- wxU(_(HELP_REPEAT ) ) );
- var_Get( p_intf, "repeat", &val );
- toolbar->ToggleTool( Repeat_Event, val.b_bool ) ;
-
- /* Create the Search Textbox */
- search_text = new wxTextCtrl( toolbar, SearchText_Event, wxT(""),
- wxDefaultPosition, wxSize(100, -1),
- wxTE_PROCESS_ENTER);
-
- /* Create the search button */
- search_button = new wxButton( toolbar , Search_Event, wxU(_("Search")) );
-
- toolbar->AddControl( new wxControl( toolbar, -1, wxDefaultPosition,
- wxSize(16, 16), wxBORDER_NONE ) );
- toolbar->AddControl( search_text );
- toolbar->AddControl( new wxControl( toolbar, -1, wxDefaultPosition,
- wxSize(5, 5), wxBORDER_NONE ) );
- toolbar->AddControl( search_button );
- search_button->SetDefault();
- toolbar->Realize();
-
- /* Create teh source selector */
- source_sel = new wxListView( playlist_panel, Source_Event,
- wxDefaultPosition, wxDefaultSize,
- wxLC_AUTOARRANGE|wxLC_SINGLE_SEL );
-
- /* Create the tree */
- treectrl = new wxTreeCtrl( playlist_panel, TreeCtrl_Event,
- wxDefaultPosition, wxDefaultSize,
- wxTR_HIDE_ROOT | wxTR_LINES_AT_ROOT|
- wxTR_NO_LINES |
- wxTR_HAS_BUTTONS | wxTR_TWIST_BUTTONS |
- wxTR_MULTIPLE | wxTR_EXTENDED );
-
- /* Create image list */
- wxImageList *p_images = new wxImageList( 16 , 16, TRUE );
-
- /* FIXME: absolutely needs to be in the right order FIXME */
- p_images->Add( wxIcon( type_unknown_xpm ) );
- p_images->Add( wxIcon( type_afile_xpm ) );
- p_images->Add( wxIcon( type_vfile_xpm ) );
- p_images->Add( wxIcon( type_directory_xpm ) );
- p_images->Add( wxIcon( type_disc_xpm ) );
- p_images->Add( wxIcon( type_cdda_xpm ) );
- p_images->Add( wxIcon( type_card_xpm ) );
- p_images->Add( wxIcon( type_net_xpm ) );
- p_images->Add( wxIcon( type_playlist_xpm ) );
- p_images->Add( wxIcon( type_node_xpm ) );
- treectrl->AssignImageList( p_images );
-
- /* Reduce font size */
- wxFont font= treectrl->GetFont();
- font.SetPointSize(9);
- treectrl->SetFont( font );
-
- wxBoxSizer *panel_sizer = new wxBoxSizer( wxHORIZONTAL );
- panel_sizer->Add( source_sel, 0, wxALL | wxEXPAND, 5 );
- panel_sizer->Add( treectrl, 1, wxEXPAND | wxALL, 5 );
- panel_sizer->Layout();
-
- playlist_panel->SetSizerAndFit( panel_sizer );
-
- int pi_widths[1] = { -1 };
- statusbar = CreateStatusBar( 1 );
- statusbar->SetStatusWidths( 1, pi_widths );
-
-#if wxUSE_DRAG_AND_DROP
- /* Associate drop targets with the playlist */
- SetDropTarget( new PlaylistFileDropTarget( this ) );
- menubar->SetDropTarget( new PlaylistFileDropTarget( this ) );
- toolbar->SetDropTarget( new PlaylistFileDropTarget( this ) );
-#endif
-
- i_saved_id = -1;
- i_saved_input_id = -1;
-
- /* Some global changes happened -> Rebuild all */
- var_AddCallback( p_playlist, "intf-change", PlaylistChanged, this );
-
- /* We went to the next item */
- var_AddCallback( p_playlist, "playlist-current", PlaylistNext, this );
-
- /* One item has been updated */
- var_AddCallback( p_playlist, "item-change", ItemChanged, this );
-
- var_AddCallback( p_playlist, "item-append", ItemAppended, this );
- var_AddCallback( p_playlist, "item-deleted", ItemDeleted, this );
-
- /* Update the playlist */
- p_current_treeroot = p_playlist->p_local_category;
- Rebuild( true );
-}
-
-Playlist::~Playlist()
-{
- if( pp_sds != NULL )
- {
- char **pp_sd = pp_sds;
- for( ; *pp_sd; pp_sd++ ) free( *pp_sd );
- free( pp_sds );
- }
-
- if( p_playlist == NULL ) return;
-
- var_DelCallback( p_playlist, "item-change", ItemChanged, this );
- var_DelCallback( p_playlist, "playlist-current", PlaylistNext, this );
- var_DelCallback( p_playlist, "intf-change", PlaylistChanged, this );
- var_DelCallback( p_playlist, "item-append", ItemAppended, this );
- var_DelCallback( p_playlist, "item-deleted", ItemDeleted, this );
- vlc_object_release( p_playlist );
-}
-
-/**********************************************************************
- * Update functions
- **********************************************************************/
-
-/* Update a node */
-void Playlist::UpdateNode( playlist_item_t *p_node, wxTreeItemId node )
-{
- wxTreeItemIdValue cookie;
- wxTreeItemId child;
- for( int i = 0; i< p_node->i_children ; i++ )
- {
- if( i == 0 )
- {
- child = treectrl->GetFirstChild( node, cookie);
- }
- else
- {
- child = treectrl->GetNextChild( node, cookie );
- }
-
- if( !child.IsOk() )
- {
- /* Not enough children */
- CreateNode( p_node->pp_children[i], node );
- /* Keep the tree pointer up to date */
- child = treectrl->GetNextChild( node, cookie );
- }
- }
- treectrl->SetItemImage( node, p_node->p_input->i_type );
-
-}
-
-/* Creates the node p_node as last child of parent */
-void Playlist::CreateNode( playlist_item_t *p_node, wxTreeItemId parent )
-{
- wxTreeItemId node =
- treectrl->AppendItem( parent, wxL2U( p_node->p_input->psz_name ),
- -1,-1, new PlaylistItem( p_node ) );
- treectrl->SetItemImage( node, p_node->p_input->i_type );
-
- UpdateNodeChildren( p_node, node );
-}
-
-/* Update all children (recursively) of this node */
-void Playlist::UpdateNodeChildren( playlist_item_t *p_node,
- wxTreeItemId node )
-{
- for( int i = 0; i< p_node->i_children ; i++ )
- {
- /* Append the item */
- if( p_node->pp_children[i]->i_children == -1 )
- {
- if( !(p_node->pp_children[i]->i_flags & PLAYLIST_DBL_FLAG) )
- {
- wxTreeItemId item =
- treectrl->AppendItem( node,
- wxL2U( p_node->pp_children[i]->p_input->psz_name ), -1,-1,
- new PlaylistItem( p_node->pp_children[i]) );
-
- UpdateTreeItem( item );
- }
- }
- else
- {
- CreateNode( p_node->pp_children[i], node );
- }
- }
-}
-
-/* Update an item in the tree */
-void Playlist::UpdateTreeItem( wxTreeItemId item )
-{
- LockPlaylist( p_intf->p_sys, p_playlist );
- if( ! item.IsOk() ) return;
-
- wxTreeItemData *p_data = treectrl->GetItemData( item );
- if( !p_data ) return;
-
- playlist_item_t *p_item = playlist_ItemGetById( p_playlist,
- ((PlaylistItem *)p_data)->i_id, true );
- if( !p_item )
- {
- UnlockPlaylist( p_intf->p_sys, p_playlist );
- return;
- }
-
- wxString msg;
- wxString duration = wxU( "" );
-
- char *psz_artist = input_item_GetArtist( p_item->p_input );
- char *psz_name = input_item_GetName( p_item->p_input );
-
- char psz_duration[MSTRTIME_MAX_SIZE];
- mtime_t dur = input_item_GetDuration( p_item->p_input );
-
- if( dur != -1 )
- {
- secstotimestr( psz_duration, dur/1000000 );
- duration.Append( wxU( " ( " ) + wxString( wxU( psz_duration ) ) +
- wxU( " )" ) );
- }
-
- if( !psz_artist || !strcmp( psz_artist, "" ) || p_item->p_input->b_fixed_name == true )
- {
- msg = wxString( wxU( psz_name ) ) + duration;
- }
- else
- {
- msg = wxString(wxU( psz_artist )) + wxT(" - ") +
- wxString(wxU(psz_name)) + duration;
- }
- free( psz_artist );
- free( psz_name );
- treectrl->SetItemText( item , msg );
- treectrl->SetItemImage( item, p_item->p_input->i_type );
-
- if( p_playlist->status.p_item == p_item )
- {
- treectrl->SetItemBold( item, true );
- while( treectrl->GetItemParent( item ).IsOk() )
- {
- item = treectrl->GetItemParent( item );
- if( ! (item == treectrl->GetRootItem() &&
- treectrl->HasFlag( wxTR_HIDE_ROOT ) ) )
- treectrl->Expand( item );
- }
- }
- else
- {
- treectrl->SetItemBold( item, false );
- }
- UnlockPlaylist( p_intf->p_sys, p_playlist );
-}
-
-/* Process a AppendIt em request */
-void Playlist::AppendItem( wxCommandEvent& event )
-{
- playlist_add_t *p_add = (playlist_add_t *)event.GetClientData();
- playlist_item_t *p_item = NULL;
- wxTreeItemId item, node;
-
- i_items_to_append--;
-
- /* No need to do anything if the playlist is going to be rebuilt */
- if( b_need_update ) return;
-
- node = FindItem( treectrl->GetRootItem(), p_add->i_node );
- if( !node.IsOk() ) goto update;
-
- p_item = playlist_ItemGetById( p_playlist, p_add->i_item, true );
- if( !p_item ) goto update;
- if( (p_item->i_flags & PLAYLIST_DBL_FLAG ) ) goto update;
-
- item = FindItem( treectrl->GetRootItem(), p_add->i_item );
- if( item.IsOk() ) goto update;
-
- item = treectrl->AppendItem( node,
- wxL2U( p_item->p_input->psz_name ), -1,-1,
- new PlaylistItem( p_item ) );
- treectrl->SetItemImage( item, p_item->p_input->i_type );
-
- if( item.IsOk() && p_item->i_children == -1 )
- {
- UpdateTreeItem( item );
- }
-
-update:
- int i_count = CountItems( treectrl->GetRootItem());
- statusbar->SetStatusText( wxString::Format( wxU(_(
- "%i items in playlist" ) ), i_count ) );
- return;
-}
-
-/* Process a updateitem request */
-void Playlist::UpdateItem( int i )
-{
- if( i < 0 ) return; /* Sanity check */
- wxTreeItemId item = FindItemByInput( treectrl->GetRootItem(), i );
- if( item.IsOk() )
- {
- UpdateTreeItem( item );
- }
-}
-
-void Playlist::RemoveItem( int i )
-{
- if( i <= 0 ) return; /* Sanity check */
- if( i == i_saved_id ) i_saved_id = -1;
-
- /* Hack: always invalidate input item cache */
- i_saved_input_id = -1;
-
- /// \todo Check if it is in the source selector */
-
- wxTreeItemId item = FindItem( treectrl->GetRootItem(), i );
-
- if( item.IsOk() )
- {
- treectrl->Delete( item );
- }
-}
-
-
-/**********************************************************************
- * Search functions (internal)
- **********************************************************************/
-
-/* Find a wxItem from a playlist id */
-wxTreeItemId Playlist::FindItem( wxTreeItemId root, int i_id )
-{
- return FindItemInner( root, i_id, false );
-}
-
-wxTreeItemId Playlist::FindItemByInput( wxTreeItemId root, int i_input_id )
-{
- return FindItemInner( root, i_input_id, true );
-}
-
-wxTreeItemId Playlist::FindItemInner( wxTreeItemId root, int i_id, bool b_byinput )
-{
- wxTreeItemIdValue cookie;
- PlaylistItem *p_wxcurrent;
- wxTreeItemId search;
- wxTreeItemId item = treectrl->GetFirstChild( root, cookie );
- wxTreeItemId child;
-
- p_wxcurrent = (PlaylistItem *)treectrl->GetItemData( root );
-
- if( i_id < 0 )
- {
- wxTreeItemId dummy; dummy.Unset(); return dummy;
- }
- if( b_byinput && i_saved_input_id == i_id )
- return saved_input_tree_item;
- if( !b_byinput && i_saved_id == i_id)
- return saved_tree_item;
-
- if( !p_wxcurrent )
- {
- wxTreeItemId dummy; dummy.Unset(); return dummy;
- }
-
- if( !b_byinput && p_wxcurrent->i_id == i_id )
- {
- i_saved_id = i_id;
- saved_tree_item = root;
- return root;
- }
- if( b_byinput && p_wxcurrent->i_input_id == i_id )
- {
- i_saved_input_id = i_id;
- saved_input_tree_item = root;
- return root;
- }
-
- while( item.IsOk() )
- {
- p_wxcurrent = (PlaylistItem *)treectrl->GetItemData( item );
- if( !b_byinput && p_wxcurrent->i_id == i_id )
- {
- i_saved_id = i_id;
- saved_tree_item = item;
- return item;
- }
- else if( b_byinput && p_wxcurrent->i_input_id == i_id )
- {
- i_saved_input_id = i_id;
- saved_input_tree_item = item;
- return item;
- }
- if( treectrl->ItemHasChildren( item ) )
- {
- wxTreeItemId search = FindItemInner( item, i_id, b_byinput );
- if( search.IsOk() )
- {
- if( !b_byinput )
- {
- i_saved_id = i_id;
- saved_tree_item = search;
- return search;
- }
- else
- {
- i_saved_input_id = i_id;
- saved_input_tree_item = search;
- return search;
-
- }
- }
- }
- item = treectrl->GetNextChild( root, cookie );
- }
- /* Not found */
- wxTreeItemId dummy; dummy.Unset(); return dummy;
-}
-
-int Playlist::CountItems( wxTreeItemId root )
-{
- wxTreeItemIdValue cookie;
- int count = 0;
- wxTreeItemId item = treectrl->GetFirstChild( root, cookie );
-
- while( item.IsOk() )
- {
- if( treectrl->ItemHasChildren( item ) )
- {
- count += CountItems( item );
- }
- else
- {
- playlist_item_t *p_item;
- LockPlaylist( p_intf->p_sys, p_playlist );
- p_item = playlist_ItemGetById( p_playlist, ((PlaylistItem *)treectrl->GetItemData( item ))->i_id, true );
- if( p_item && p_item->i_children == -1 )
- count++;
- UnlockPlaylist( p_intf->p_sys, p_playlist );
- }
- item = treectrl->GetNextChild( root, cookie );
- }
- return count;
-}
-
-/* Find a wxItem from a name (from current) */
-wxTreeItemId Playlist::FindItemByName( wxTreeItemId root, wxString search_string, wxTreeItemId current, bool *pb_current_found )
-{
- wxTreeItemIdValue cookie;
- wxTreeItemId search;
- wxTreeItemId item = treectrl->GetFirstChild( root, cookie );
- wxTreeItemId child;
-
- while( item.IsOk() )
- {
- if( treectrl->GetItemText( item).Lower().Contains(
- search_string.Lower() ) )
- {
- if( !current.IsOk() || *pb_current_found == true )
- {
- return item;
- }
- else if( current.IsOk() && item == current )
- {
- *pb_current_found = true;
- }
- }
- if( treectrl->ItemHasChildren( item ) )
- {
- wxTreeItemId search = FindItemByName( item, search_string, current,
- pb_current_found );
- if( search.IsOk() )
- {
- return search;
- }
- }
- item = treectrl->GetNextChild( root, cookie);
- }
- /* Not found */
- wxTreeItemId dummy; dummy.Unset();
- return dummy;
-}
-
-/**********************************************************************
- * Rebuild the playlist
- **********************************************************************/
-void Playlist::Rebuild( bool b_root )
-{
- i_items_to_append = 0;
-
- LockPlaylist( p_intf->p_sys, p_playlist );
-
- /* Invalidate cache */
- i_saved_id = -1;
- i_saved_input_id = -1;
-
- /* Rebuild the list */
- source_sel->ClearAll();
- for( int i = 0 ; i< p_current_viewroot->i_children ; i++ )
- {
- source_sel->InsertItem( i,
- wxL2U( p_current_viewroot->pp_children[i]->p_input->psz_name) );
- source_sel->SetItemData( i,
- p_current_viewroot->pp_children[i]->i_id );
- if( p_current_viewroot->pp_children[i] == p_current_treeroot )
- source_sel->Select( i );
- }
-
- /* HACK we should really get new*/
- treectrl->DeleteAllItems();
- treectrl->AddRoot( wxU(_("root" )), -1, -1,
- new PlaylistItem( p_current_treeroot ) );
-
- wxTreeItemId root = treectrl->GetRootItem();
- UpdateNodeChildren( p_current_treeroot, root );
-
- int i_count = CountItems( treectrl->GetRootItem() );
-
- statusbar->SetStatusText( wxString::Format( wxU(_(
- "%i items in playlist")), i_count ), 0 );
-
- UnlockPlaylist( p_intf->p_sys, p_playlist );
-}
-
-void Playlist::ShowPlaylist( bool show )
-{
- if( show ) Rebuild( true );
- Show( show );
-}
-
-/* This function is called on a regular basis */
-void Playlist::UpdatePlaylist()
-{
- i_update_counter++;
-
- /* If the playlist isn't show there's no need to update it */
- if( !IsShown() ) return;
-
- if( this->b_need_update )
- {
- this->b_need_update = false;
- Rebuild( true );
- }
-
- /* Updating the playing status every 0.5s is enough */
- if( i_update_counter % 5 ) return;
-}
-
-/*****************************************************************************
- * Private methods.
- *****************************************************************************/
-void Playlist::DeleteTreeItem( wxTreeItemId item )
-{
- PlaylistItem *p_wxitem;
- playlist_item_t *p_item;
- p_wxitem = (PlaylistItem *)treectrl->GetItemData( item );
-
- LockPlaylist( p_intf->p_sys, p_playlist );
- p_item = playlist_ItemGetById( p_playlist, p_wxitem->i_id, true );
-
- if( !p_item )
- {
- UnlockPlaylist( p_intf->p_sys, p_playlist );
- return;
- }
-
- if( p_item->i_children == -1 ) DeleteItem( p_item->p_input->i_id );
- else DeleteNode( p_item );
-
- RemoveItem( p_item->i_id );
- UnlockPlaylist( p_intf->p_sys, p_playlist );
-}
-
-void Playlist::DeleteItem( int item_id )
-{
- playlist_DeleteFromInput( p_playlist, item_id, true );
-}
-
-void Playlist::DeleteNode( playlist_item_t *p_item )
-{
- playlist_NodeDelete( p_playlist, p_item, true , false );
-}
-
-void Playlist::OnMenuClose( wxCommandEvent& event )
-{
- wxCloseEvent cevent;
- OnClose(cevent);
-}
-
-void Playlist::OnClose( wxCloseEvent& WXUNUSED(event) )
-{
- Hide();
-}
-
-void Playlist::OnSave( wxCommandEvent& WXUNUSED(event) )
-{
- struct {
- char *psz_desc;
- char *psz_filter;
- char *psz_module;
- } formats[] = {//{ _("M3U file"), "*.m3u", "export-m3u" },
- { _("XSPF playlist"), "*.xspf", "export-xspf"}
- };
-
- wxString filter = wxT("");
-
- if( playlist_IsEmpty( p_playlist ) )
- {
- wxMessageBox( wxU(_("Playlist is empty") ), wxU(_("Can't save")),
- wxICON_WARNING | wxOK, this );
- return;
- }
-
- for( unsigned int i = 0; i < sizeof(formats)/sizeof(formats[0]); i++)
- {
- filter.Append( wxU(formats[i].psz_desc) );
- filter.Append( wxT("|") );
- filter.Append( wxU(formats[i].psz_filter) );
- filter.Append( wxT("|") );
- }
- wxFileDialog dialog( this, wxU(_("Save playlist")),
- wxT(""), wxT(""), filter, wxSAVE );
-
- if( dialog.ShowModal() == wxID_OK )
- {
- if( dialog.GetPath().mb_str(wxConvUTF8) )
- {
- /* what root should we export? */
- if( p_playlist->p_root_category->i_children > 0 )
- {
- playlist_Export( p_playlist, dialog.GetPath().mb_str(wxConvUTF8),
- p_playlist->p_root_category->pp_children[0],
- formats[dialog.GetFilterIndex()].psz_module );
- }
- }
- }
-
-}
-
-void Playlist::OnOpen( wxCommandEvent& WXUNUSED(event) )
-{
- wxFileDialog dialog( this, wxU(_("Open playlist")), wxT(""), wxT(""),
- wxT("All playlists|" EXTENSIONS_PLAYLIST "|XSPF playlist|*.xspf|M3U files|*.m3u"), wxOPEN );
-
- if( dialog.ShowModal() == wxID_OK )
- {
- playlist_Import( p_playlist, dialog.GetPath().mb_str(wxConvUTF8) );
- }
-}
-
-void Playlist::OnAddFile( wxCommandEvent& WXUNUSED(event) )
-{
- p_intf->p_sys->pf_show_dialog( p_intf, INTF_DIALOG_FILE_SIMPLE, 0, 0 );
-
-}
-
-void Playlist::OnAddDir( wxCommandEvent& WXUNUSED(event) )
-{
- p_intf->p_sys->pf_show_dialog( p_intf, INTF_DIALOG_DIRECTORY, 0, 0 );
-
-}
-
-void Playlist::OnAddMRL( wxCommandEvent& WXUNUSED(event) )
-{
- p_intf->p_sys->pf_show_dialog( p_intf, INTF_DIALOG_FILE, 0, 0 );
-
-}
-
-/********************************************************************
- * Sorting functions
- ********************************************************************/
-void Playlist::OnSort( wxCommandEvent& event )
-{
- PlaylistItem *p_wxitem;
- p_wxitem = (PlaylistItem *)treectrl->GetItemData( treectrl->GetRootItem() );
-
- LockPlaylist( p_intf->p_sys, p_playlist );
- switch( event.GetId() )
- {
- case SortTitle_Event:
- playlist_RecursiveNodeSort( p_playlist,
- playlist_ItemGetById( p_playlist, p_wxitem->i_id,
- true ),
- SORT_TITLE_NODES_FIRST, ORDER_NORMAL );
- break;
- case RSortTitle_Event:
- playlist_RecursiveNodeSort( p_playlist,
- playlist_ItemGetById( p_playlist, p_wxitem->i_id,
- true ),
- SORT_TITLE_NODES_FIRST, ORDER_REVERSE );
- }
- UnlockPlaylist( p_intf->p_sys, p_playlist );
-
- Rebuild( true );
-}
-
-/**********************************************************************
- * Search functions (user)
- **********************************************************************/
-/*void Playlist::OnSearchTextChange( wxCommandEvent& WXUNUSED(event) )
-{
- search_button->SetDefault();
-}*/
-
-void Playlist::OnSearch( wxCommandEvent& WXUNUSED(event) )
-{
- wxString search_string = search_text->GetValue();
- PlaylistItem *p_wxroot;
- p_wxroot = (PlaylistItem *)treectrl->GetItemData( treectrl->GetRootItem() );
- playlist_item_t *p_root = playlist_ItemGetById( p_playlist, p_wxroot->i_id,
- true );
-
- assert( p_root );
- char *psz_name = wxFromLocale( search_string );
- playlist_LiveSearchUpdate( p_playlist, p_root, psz_name );
- Rebuild( true );
-
- wxLocaleFree( psz_name );
-}
-
-/**********************************************************************
- * Selection functions
- **********************************************************************/
-void Playlist::RecursiveDeleteSelection( wxTreeItemId root )
-{
- wxTreeItemIdValue cookie;
- wxTreeItemId child = treectrl->GetFirstChild( root, cookie );
- wxTreeItemId nextchild;
- bool childIsSelected = FALSE;
- bool nextchildIsSelected = FALSE;
-
- if( child.IsOk() ) childIsSelected = treectrl->IsSelected( child );
-
- while( child.IsOk() )
- {
- nextchild = treectrl->GetNextChild( root, cookie );
- if( nextchild.IsOk() )
- nextchildIsSelected = treectrl->IsSelected( nextchild );
- if( childIsSelected )
- DeleteTreeItem( child );
- else if( treectrl->ItemHasChildren( child ) )
- RecursiveDeleteSelection( child );
- child = nextchild;
- childIsSelected = nextchildIsSelected;
- }
-}
-
-void Playlist::OnDeleteSelection( wxCommandEvent& WXUNUSED(event) )
-{
- RecursiveDeleteSelection( treectrl->GetRootItem() );
-}
-
-/**********************************************************************
- * Playlist mode functions
- **********************************************************************/
-void Playlist::OnRandom( wxCommandEvent& event )
-{
- vlc_value_t val;
- val.b_bool = event.IsChecked();
- var_Set( p_playlist, "random", val);
-}
-
-void Playlist::OnLoop( wxCommandEvent& event )
-{
- vlc_value_t val;
- val.b_bool = event.IsChecked();
- var_Set( p_playlist, "loop", val);
-}
-
-void Playlist::OnRepeat( wxCommandEvent& event )
-{
- vlc_value_t val;
- val.b_bool = event.IsChecked();
- var_Set( p_playlist, "repeat", val);
-}
-
-/********************************************************************
- * Event
- ********************************************************************/
-void Playlist::OnActivateItem( wxTreeEvent& event )
-{
- playlist_item_t *p_item, *p_parent;
-
- PlaylistItem *p_wxitem = (PlaylistItem *)treectrl->GetItemData(
- event.GetItem() );
-
- LockPlaylist( p_intf->p_sys, p_playlist );
-
- if( !( p_wxitem ) )
- {
- UnlockPlaylist( p_intf->p_sys, p_playlist );
- return;
- }
- p_item = playlist_ItemGetById( p_playlist, p_wxitem->i_id, true );
-
- p_parent = p_item;
- while( p_parent )
- {
- if( p_parent == p_current_treeroot )
- break;
- p_parent = p_parent->p_parent;
- }
-
- if( p_parent )
- {
- playlist_Control( p_playlist, PLAYLIST_VIEWPLAY, true, p_parent, p_item );
- }
- UnlockPlaylist( p_intf->p_sys, p_playlist );
-}
-
-void Playlist::OnKeyDown( wxTreeEvent& event )
-{
- long keycode = event.GetKeyCode();
- /* Delete selected items */
- if( keycode == WXK_BACK || keycode == WXK_DELETE || keycode == WXK_NUMPAD_DELETE )
- {
- /* We send a dummy event */
- OnDeleteSelection( event );
- }
- /* Work around wxWin32 bug */
- else if( keycode == WXK_RETURN )
- {
- wxArrayTreeItemIds items;
- if( treectrl->GetSelections( items ) > 0 )
- {
- wxTreeEvent event;
- event.SetItem( items.Item( 0 ) );
- OnActivateItem( event );
- }
- }
- else
- {
- event.Skip();
- }
-}
-
-void Playlist::OnDragItemBegin( wxTreeEvent& event )
-{
- event.Allow();
- draged_tree_item = event.GetItem();
-}
-
-void Playlist::OnDragItemEnd( wxTreeEvent& event )
-{
- wxTreeItemId dest_tree_item = event.GetItem();
-
- if( !dest_tree_item.IsOk() ) return;
-
- /* check that we're not trying to move a node into one of its children */
- wxTreeItemId parent = dest_tree_item;
- while( parent != treectrl->GetRootItem() )
- {
- if( draged_tree_item == parent ) return;
- parent = treectrl->GetItemParent( parent );
- }
-
- LockPlaylist( p_intf->p_sys, p_playlist );
-
- PlaylistItem *p_wxdrageditem =
- (PlaylistItem *)treectrl->GetItemData( draged_tree_item );
- PlaylistItem *p_wxdestitem =
- (PlaylistItem *)treectrl->GetItemData( dest_tree_item );
- if( !p_wxdrageditem || !p_wxdestitem )
- {
- UnlockPlaylist( p_intf->p_sys, p_playlist );
- return;
- }
-
- playlist_item_t *p_drageditem =
- playlist_ItemGetById(p_playlist, p_wxdrageditem->i_id, true );
- playlist_item_t *p_destitem =
- playlist_ItemGetById(p_playlist, p_wxdestitem->i_id, true );
- if( !p_drageditem || !p_destitem )
- {
- UnlockPlaylist( p_intf->p_sys, p_playlist );
- return;
- }
-
- if( p_destitem->i_children == -1 )
- /* this is a leaf */
- {
- parent = treectrl->GetItemParent( dest_tree_item );
- PlaylistItem *p_parent =
- (PlaylistItem *)treectrl->GetItemData( parent );
- if( !p_parent )
- {
- UnlockPlaylist( p_intf->p_sys, p_playlist );
- return;
- }
- playlist_item_t *p_destitem2 =
- playlist_ItemGetById( p_playlist, p_parent->i_id, true );
- if( !p_destitem2 )
- {
- UnlockPlaylist( p_intf->p_sys, p_playlist );
- return;
- }
- int i;
- for( i = 0; i < p_destitem2->i_children; i++ )
- {
- if( p_destitem2->pp_children[i] == p_destitem ) break;
- }
- playlist_TreeMove( p_playlist, p_drageditem, p_destitem2, i );
- }
- else
- /* this is a node */
- {
- playlist_TreeMove( p_playlist, p_drageditem, p_destitem, 0 );
- }
-
- UnlockPlaylist( p_intf->p_sys, p_playlist );
-
- /* FIXME: having this Rebuild() is dirty */
- Rebuild( true );
-}
-
-#if wxUSE_DRAG_AND_DROP
-PlaylistFileDropTarget::PlaylistFileDropTarget( Playlist *p ):p( p ){}
-
-/********************************************************************
- * File Drag And Drop handling
- ********************************************************************/
-bool PlaylistFileDropTarget::OnDropFiles( wxCoord x, wxCoord y,
- const wxArrayString& filenames )
-{
- int i_pos = 0;
- playlist_item_t *p_dest;
-
- LockPlaylist( p->p_intf->p_sys, p->p_playlist );
-
- /* find the destination node and position in that node */
- const wxPoint pt( x, y );
- wxTreeItemId item = p->treectrl->HitTest( pt );
-
- if( !item.IsOk() )
- {
- /* We were droped below the last item so we append to the
- * general node */
- msg_Err( p->p_playlist, "USE OF P_GENERAL" );
- p_dest = p->p_playlist->p_local_category;
- i_pos = PLAYLIST_END;
- }
- else
- {
- PlaylistItem *p_plitem =
- (PlaylistItem *)p->treectrl->GetItemData( item );
- p_dest = playlist_ItemGetById( p->p_playlist, p_plitem->i_id, true );
-
- if( p_dest->i_children == -1 )
- {
- /* This is a leaf. Append right after it
- * We thus need to find the parrent node and the position of the
- * leaf in its children list */
- wxTreeItemId parent = p->treectrl->GetItemParent( item );
- PlaylistItem *p_parent =
- (PlaylistItem *)p->treectrl->GetItemData( parent );
- if( !p_parent )
- {
- UnlockPlaylist( p->p_intf->p_sys, p->p_playlist );
- return FALSE;
- }
- playlist_item_t *p_node =
- playlist_ItemGetById( p->p_playlist, p_parent->i_id, true );
- if( !p_node )
- {
- UnlockPlaylist( p->p_intf->p_sys, p->p_playlist );
- return FALSE;
- }
- for( i_pos = 0; i_pos < p_node->i_children; i_pos++ )
- {
- if( p_node->pp_children[i_pos] == p_dest ) break;
- }
- p_dest = p_node;
- }
- }
-
- UnlockPlaylist( p->p_intf->p_sys, p->p_playlist );
-
- /* Put the items in the playlist node */
- for( size_t i = 0; i < filenames.GetCount(); i++ )
- {
- char *psz_utf8 = wxDnDFromLocale( filenames[i] );
- input_item_t *p_input = input_item_New( p->p_playlist,
- psz_utf8, psz_utf8 );
- int i_ret = ( playlist_BothAddInput( p->p_playlist, p_input, p_dest,
- PLAYLIST_PREPARSE, i_pos, NULL, NULL, pl_Unlocked ) != VLC_SUCCESS );
- vlc_gc_decref( p_input );
- wxDnDLocaleFree( psz_utf8 );
- if( i_ret != VLC_SUCCESS )
- return FALSE;
- }
-
- /* FIXME: having this Rebuild() is dirty */
- p->Rebuild( true );
-
- return TRUE;
-}
-#endif
-
-/**********************************************************************
- * Menu
- **********************************************************************/
-
-void Playlist::OnMenuOpen( wxMenuEvent& event)
-{
-#if defined( __WXMSW__ )
-# define GetEventObject GetMenu
-#endif
-
- if( event.GetEventObject() == p_view_menu )
- {
- p_view_menu = ViewMenu();
- }
-#if defined( __WXMSW__ )
-# undef GetEventObject
-#endif
-}
-
-void Playlist::OnMenuEvent( wxCommandEvent& event )
-{
- if( event.GetId() < FirstView_Event )
- {
- event.Skip();
- return;
- }
- else if( event.GetId() < LastView_Event )
- {
- if( event.GetId() == CategoryView_Event )
- {
- p_current_viewroot = p_playlist->p_root_category;
- if( p_current_treeroot == p_playlist->p_local_category ||
- p_current_treeroot == p_playlist->p_local_onelevel )
- {
- p_current_treeroot = p_playlist->p_local_category;
- }
- else if( p_current_treeroot == p_playlist->p_ml_category ||
- p_current_treeroot == p_playlist->p_ml_onelevel )
- {
- p_current_treeroot = p_playlist->p_ml_category;
- }
- }
- else if( event.GetId() == OneLevelView_Event )
- {
- p_current_viewroot = p_playlist->p_root_onelevel;
- if( p_current_treeroot == p_playlist->p_local_category ||
- p_current_treeroot == p_playlist->p_local_onelevel )
- {
- p_current_treeroot = p_playlist->p_local_onelevel;
- }
- else if( p_current_treeroot == p_playlist->p_ml_category ||
- p_current_treeroot == p_playlist->p_ml_onelevel )
- {
- p_current_treeroot = p_playlist->p_ml_onelevel;
- }
- }
- wxCommandEvent event;
- OnSearch( event );
- return;
- }
- else if( event.GetId() >= FirstSD_Event && event.GetId() < LastSD_Event )
- {
- if( !playlist_IsServicesDiscoveryLoaded( p_playlist,
- pp_sds[event.GetId() - FirstSD_Event] ) )
- {
- playlist_ServicesDiscoveryAdd( p_playlist,
- pp_sds[event.GetId() - FirstSD_Event] );
- }
- else
- {
- //wxMutexGuiLeave();
- playlist_ServicesDiscoveryRemove( p_playlist,
- pp_sds[event.GetId() - FirstSD_Event] );
- //wxMutexGuiEnter();
- }
- }
-}
-
-wxMenu * Playlist::ViewMenu()
-{
- if( !p_view_menu )
- {
- p_view_menu = new wxMenu;
- }
- else
- {
- wxMenuItemList::Node *node = p_view_menu->GetMenuItems().GetFirst();
- for( ; node; )
- {
- wxMenuItem *item = node->GetData();
- node = node->GetNext();
- p_view_menu->Delete( item );
- }
- }
-
- p_view_menu->Append( CategoryView_Event, wxU(_("Normal") ) );
- p_view_menu->Append( OneLevelView_Event, wxU(_("One level") ) );
- return p_view_menu;
-}
-
-wxMenu *Playlist::SDMenu()
-{
- p_sd_menu = new wxMenu;
-
- char **ppsz_longnames;
- char **ppsz_names = vlc_sd_GetNames( &ppsz_longnames );
- if( !ppsz_names )
- return p_sd_menu;
-
- char **ppsz_name = ppsz_names, **ppsz_longname = ppsz_longnames;
-
- int i_number = 0;
-
- for( ; *ppsz_name; ppsz_name++, ppsz_longname++ )
- {
- p_sd_menu->AppendCheckItem( FirstSD_Event + i_number++ ,
- wxU( *ppsz_longname ) );
-
- if( playlist_IsServicesDiscoveryLoaded( p_playlist, *ppsz_name ) )
- p_sd_menu->Check( FirstSD_Event + i_number, TRUE );
-
- free( *ppsz_longname );
- }
- pp_sds = ppsz_names;
- free( ppsz_longnames );
- return p_sd_menu;
-}
-
-
-/*****************************************************************************
- * Popup management functions
- *****************************************************************************/
-void Playlist::OnPopup( wxContextMenuEvent& event )
-{
- wxPoint pt = event.GetPosition();
- playlist_item_t *p_item;
-
- i_wx_popup_item = treectrl->HitTest( ScreenToClient( pt ) );
- if( i_wx_popup_item.IsOk() )
- {
- PlaylistItem *p_wxitem = (PlaylistItem *)treectrl->GetItemData(
- i_wx_popup_item );
- PlaylistItem *p_wxparent= (PlaylistItem *)treectrl->GetItemData(
- treectrl->GetItemParent( i_wx_popup_item ) );
- i_popup_item = p_wxitem->i_id;
- i_popup_parent = p_wxparent->i_id;
- treectrl->SelectItem( i_wx_popup_item );
-
- LockPlaylist( p_intf->p_sys, p_playlist );
- p_item = playlist_ItemGetById( p_playlist, i_popup_item, true );
-
- if( !p_item )
- {
- UnlockPlaylist( p_intf->p_sys, p_playlist );
- return;
- }
- if( p_item->i_children == -1 )
- {
- UnlockPlaylist( p_intf->p_sys, p_playlist );
- Playlist::PopupMenu( item_popup,
- ScreenToClient( wxGetMousePosition() ) );
- }
- else
- {
- UnlockPlaylist( p_intf->p_sys, p_playlist );
- Playlist::PopupMenu( node_popup,
- ScreenToClient( wxGetMousePosition() ) );
- }
- }
-}
-
-void Playlist::OnPopupPlay( wxCommandEvent& event )
-{
- playlist_item_t *p_popup_item, *p_popup_parent;
- LockPlaylist( p_intf->p_sys, p_playlist );
- p_popup_item = playlist_ItemGetById( p_playlist, i_popup_item, true );
-
- p_popup_parent = p_popup_item;
- while( p_popup_parent )
- {
- if( p_popup_parent == p_current_treeroot )
- break;
- p_popup_parent = p_popup_parent->p_parent;
- }
-
- if( p_popup_parent )
- {
- playlist_Control( p_playlist, PLAYLIST_VIEWPLAY, true, p_popup_parent,
- p_popup_item );
- }
- UnlockPlaylist( p_intf->p_sys, p_playlist );
-}
-
-void Playlist::OnPopupPreparse( wxCommandEvent& event )
-{
- Preparse();
-}
-
-void Playlist::Preparse()
-{
- playlist_item_t *p_popup_item;
- LockPlaylist( p_intf->p_sys, p_playlist );
- p_popup_item = playlist_ItemGetById( p_playlist, i_popup_item, true );
-
- if( p_popup_item != NULL )
- {
- if( p_popup_item->i_children == -1 )
- {
- playlist_PreparseEnqueue( p_playlist, p_popup_item->p_input, pl_Unlocked );
- }
- else
- {
- int i = 0;
- playlist_item_t *p_parent = p_popup_item;
- for( i = 0; i< p_parent->i_children ; i++ )
- {
- wxMenuEvent dummy;
- i_wx_popup_item = FindItem( treectrl->GetRootItem(),
- p_parent->pp_children[i]->i_id );
- i_popup_item = p_parent->pp_children[i]->i_id;
- Preparse();
- }
- }
- }
- UnlockPlaylist( p_intf->p_sys, p_playlist );
-}
-
-void Playlist::OnPopupDel( wxCommandEvent& event )
-{
- DeleteTreeItem( i_wx_popup_item );
-}
-
-void Playlist::OnPopupSort( wxCommandEvent& event )
-{
- PlaylistItem *p_wxitem;
- playlist_item_t *p_item;
-
- p_wxitem = (PlaylistItem *)treectrl->GetItemData( i_wx_popup_item );
- LockPlaylist( p_intf->p_sys, p_playlist );
-
- p_item = playlist_ItemGetById( p_playlist, p_wxitem->i_id, true );
- if( p_item->i_children >= 0 )
- {
- playlist_RecursiveNodeSort( p_playlist, p_item,
- SORT_TITLE_NODES_FIRST, ORDER_NORMAL );
-
- treectrl->DeleteChildren( i_wx_popup_item );
- i_saved_id = -1; i_saved_input_id = -1;
- UpdateNodeChildren( p_item, i_wx_popup_item );
-
- }
- UnlockPlaylist( p_intf->p_sys, p_playlist );
-}
-
-void Playlist::OnPopupInfo( wxCommandEvent& event )
-{
- LockPlaylist( p_intf->p_sys, p_playlist );
- playlist_item_t *p_popup_item = playlist_ItemGetById( p_playlist,
- i_popup_item,
- true );
- if( p_popup_item )
- {
- iteminfo_dialog = new ItemInfoDialog( p_intf, p_popup_item, this );
- if( iteminfo_dialog->ShowModal() == wxID_OK )
- {
- UpdateItem( i_wx_popup_item );
- }
- delete iteminfo_dialog;
- }
- UnlockPlaylist( p_intf->p_sys, p_playlist );
-}
-
-void Playlist::OnPopupAddNode( wxCommandEvent& event )
-{
- wxTextEntryDialog text( NULL, wxU(_( "Please enter node name" )),
- wxU(_( "Add node" )), wxU(_( "New node" )) );
- if( text.ShowModal() != wxID_OK ) return;
-
- char *psz_name = wxFromLocale( text.GetValue() );
-
- LockPlaylist( p_intf->p_sys, p_playlist );
-
- PlaylistItem *p_wxitem;
- playlist_item_t *p_item;
-
- p_wxitem = (PlaylistItem *)treectrl->GetItemData( i_wx_popup_item );
-
- p_item = playlist_ItemGetById( p_playlist, p_wxitem->i_id, true );
-
- playlist_NodeCreate( p_playlist, psz_name, p_item, 0, NULL );
-
- UnlockPlaylist( p_intf->p_sys, p_playlist );
- Rebuild( true );
-
- wxLocaleFree( psz_name );
-}
-
-void Playlist::OnSourceSelected( wxListEvent &event )
-{
- int i_id = event.GetData();
-
- if( !p_current_treeroot || i_id != p_current_treeroot->i_id )
- {
- playlist_item_t *p_item = playlist_ItemGetById( p_playlist, i_id,
- true );
- if( p_item ) p_current_treeroot = p_item;
- Rebuild( true );
- }
-}
-
-/*****************************************************************************
- * Custom events management
- *****************************************************************************/
-void Playlist::OnPlaylistEvent( wxCommandEvent& event )
-{
- switch( event.GetId() )
- {
- case UpdateItem_Event:
- UpdateItem( event.GetInt() );
- break;
- case AppendItem_Event:
- AppendItem( event );
- break;
- case RemoveItem_Event:
- RemoveItem( event.GetInt() );
- break;
- }
-}
-
-/*****************************************************************************
- * PlaylistChanged: callback triggered by the intf-change playlist variable
- * We don't rebuild the playlist directly here because we don't want the
- * caller to block for a too long time.
- *****************************************************************************/
-static int PlaylistChanged( vlc_object_t *p_this, const char *psz_variable,
- vlc_value_t oval, vlc_value_t nval, void *param )
-{
- Playlist *p_playlist_dialog = (Playlist *)param;
- p_playlist_dialog->b_need_update = true;
- return VLC_SUCCESS;
-}
-
-/*****************************************************************************
- * Next: callback triggered by the playlist-current playlist variable
- *****************************************************************************/
-static int PlaylistNext( vlc_object_t *p_this, const char *psz_variable,
- vlc_value_t oval, vlc_value_t nval, void *param )
-{
- Playlist *p_playlist_dialog = (Playlist *)param;
-
- wxCommandEvent event( wxEVT_PLAYLIST, UpdateItem_Event );
- event.SetInt( oval.i_int );
- p_playlist_dialog->AddPendingEvent( event );
- event.SetInt( nval.i_int );
- p_playlist_dialog->AddPendingEvent( event );
-
- return 0;
-}
-
-/*****************************************************************************
- * ItemChanged: callback triggered by the item-change playlist variable
- *****************************************************************************/
-static int ItemChanged( vlc_object_t *p_this, const char *psz_variable,
- vlc_value_t old_val, vlc_value_t new_val, void *param )
-{
- Playlist *p_playlist_dialog = (Playlist *)param;
-
- wxCommandEvent event( wxEVT_PLAYLIST, UpdateItem_Event );
- event.SetInt( new_val.i_int );
- p_playlist_dialog->AddPendingEvent( event );
-
- return 0;
-}
-static int ItemDeleted( vlc_object_t *p_this, const char *psz_variable,
- vlc_value_t old_val, vlc_value_t new_val, void *param )
-{
- Playlist *p_playlist_dialog = (Playlist *)param;
-
- wxCommandEvent event( wxEVT_PLAYLIST, RemoveItem_Event );
- event.SetInt( new_val.i_int );
- p_playlist_dialog->AddPendingEvent( event );
-
- return 0;
-}
-
-static int ItemAppended( vlc_object_t *p_this, const char *psz_variable,
- vlc_value_t oval, vlc_value_t nval, void *param )
-{
- Playlist *p_playlist_dialog = (Playlist *)param;
-
- playlist_add_t *p_add = (playlist_add_t *)malloc(sizeof( playlist_add_t));
- memcpy( p_add, nval.p_address, sizeof( playlist_add_t ) );
-
- if( ++p_playlist_dialog->i_items_to_append >= 50 )
- {
- /* Too many items waiting to be added, it will be quicker to rebuild
- * the whole playlist */
- p_playlist_dialog->b_need_update = true;
- return VLC_SUCCESS;
- }
-
- wxCommandEvent event( wxEVT_PLAYLIST, AppendItem_Event );
- event.SetClientData( (void *)p_add );
- p_playlist_dialog->AddPendingEvent( event );
-
- return VLC_SUCCESS;
-}
-}
+++ /dev/null
-/*****************************************************************************
- * playlist.hpp: Header for the playlist
- *****************************************************************************
- * Copyright (C) 1999-2005 the VideoLAN team
- * $Id$
- *
- * Authors: Clément Stenac <zorglub@videolan.org>
- *
- * 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., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
- *****************************************************************************/
-
-#ifndef _WXVLC_PLAYLIST_H_
-#define _WXVLC_PLAYLIST_H_
-
-#include "wxwidgets.hpp"
-
-#include <wx/listctrl.h>
-#include <wx/treectrl.h>
-#include <wx/dnd.h>
-
-#define MODE_NONE 0
-#define MODE_GROUP 1
-#define MODE_AUTHOR 2
-#define MODE_TITLE 3
-
-#define OPEN_NORMAL 0
-#define OPEN_STREAM 1
-
-namespace wxvlc
-{
-class ItemInfoDialog;
-class NewGroup;
-class ExportPlaylist;
-
-/* Playlist */
-class Playlist: public wxFrame
-{
-public:
- /* Constructor */
- Playlist( intf_thread_t *p_intf, wxWindow *p_parent );
- virtual ~Playlist();
-
- void UpdatePlaylist();
- void ShowPlaylist( bool show );
- void UpdateItem( int );
- void AppendItem( wxCommandEvent& );
-
- bool b_need_update;
- int i_items_to_append;
-
- int GetCurrentView( ){ return i_current_view; };
-
-private:
- void RemoveItem( int );
- void DeleteTreeItem( wxTreeItemId );
- void DeleteItem( int item );
- void DeleteNode( playlist_item_t *node );
-
- void RecursiveDeleteSelection( wxTreeItemId );
-
- /* Event handlers (these functions should _not_ be virtual) */
-
- /* Menu Handlers */
- void OnAddFile( wxCommandEvent& event );
- void OnAddDir( wxCommandEvent& event );
- void OnAddMRL( wxCommandEvent& event );
- void OnMenuClose( wxCommandEvent& event );
- void OnClose( wxCloseEvent& WXUNUSED(event) );
-
- void OnDeleteSelection( wxCommandEvent& event );
-
- void OnOpen( wxCommandEvent& event );
- void OnSave( wxCommandEvent& event );
-
- /* Search (user) */
- void OnSearch( wxCommandEvent& event );
- /*void OnSearchTextChange( wxCommandEvent& event );*/
- wxTextCtrl *search_text;
- wxButton *search_button;
- wxTreeItemId search_current;
-
- /* Sort */
- int i_sort_mode;
- void OnSort( wxCommandEvent& event );
- int i_title_sorted;
- int i_group_sorted;
- int i_duration_sorted;
-
- /* Dynamic menus */
- void OnMenuEvent( wxCommandEvent& event );
- void OnMenuOpen( wxMenuEvent& event );
- wxMenu *p_view_menu;
- wxMenu *p_sd_menu;
- wxMenu *ViewMenu();
- wxMenu *SDMenu();
-
- void OnUp( wxCommandEvent& event);
- void OnDown( wxCommandEvent& event);
-
- void OnRandom( wxCommandEvent& event );
- void OnRepeat( wxCommandEvent& event );
- void OnLoop ( wxCommandEvent& event );
-
- void OnActivateItem( wxTreeEvent& event );
- void OnKeyDown( wxTreeEvent& event );
- void OnNewGroup( wxCommandEvent& event );
-
- void OnDragItemBegin( wxTreeEvent& event );
- void OnDragItemEnd( wxTreeEvent& event );
- wxTreeItemId draged_tree_item;
-
- /* Popup */
- wxMenu *item_popup;
- wxMenu *node_popup;
- wxTreeItemId i_wx_popup_item;
- int i_popup_item;
- int i_popup_parent;
- void OnPopup( wxContextMenuEvent& event );
- void OnPopupPlay( wxCommandEvent& event );
- void OnPopupPreparse( wxCommandEvent& event );
- void OnPopupSort( wxCommandEvent& event );
- void OnPopupDel( wxCommandEvent& event );
- void OnPopupEna( wxCommandEvent& event );
- void OnPopupInfo( wxCommandEvent& event );
- void OnPopupAddNode( wxCommandEvent& event );
-
- /* List */
- void OnSourceSelected( wxListEvent &event );
-protected:
- void Rebuild( bool );
-private:
-
- void Preparse();
-
- /* Update */
- void UpdateNode( playlist_item_t*, wxTreeItemId );
- void UpdateNodeChildren( playlist_item_t*, wxTreeItemId );
- void CreateNode( playlist_item_t*, wxTreeItemId );
- void UpdateTreeItem( wxTreeItemId );
-
- /* Search (internal) */
- int CountItems( wxTreeItemId);
- wxTreeItemId FindItem( wxTreeItemId, int );
- wxTreeItemId FindItemByInput( wxTreeItemId, int );
- wxTreeItemId FindItemInner( wxTreeItemId, int , bool );
- wxTreeItemId FindItemByName( wxTreeItemId, wxString,
- wxTreeItemId, bool *);
-
- wxTreeItemId saved_tree_item;
- wxTreeItemId saved_input_tree_item;
- int i_saved_id;
- int i_saved_input_id;
-
-protected:
- playlist_t *p_playlist;
-
-private:
- /* Custom events */
- void OnPlaylistEvent( wxCommandEvent& event );
-
- DECLARE_EVENT_TABLE();
-
-
- /* Global widgets */
- wxStatusBar *statusbar;
- ItemInfoDialog *iteminfo_dialog;
-
- int i_update_counter;
-
- bool b_changed_view;
- const char **pp_sds;
-
-protected:
- intf_thread_t *p_intf;
- wxTreeCtrl *treectrl;
- wxListView *source_sel;
- int i_current_view;
- playlist_item_t *p_current_treeroot;
- playlist_item_t *p_current_viewroot;
-
-friend class PlaylistFileDropTarget;
-};
-
-#if wxUSE_DRAG_AND_DROP
-/* Playlist file drop target */
-class PlaylistFileDropTarget: public wxFileDropTarget
-{
-public:
- PlaylistFileDropTarget( Playlist * );
- virtual bool OnDropFiles( wxCoord x, wxCoord y,
- const wxArrayString& filenames );
-private:
- Playlist *p;
-};
-#endif
-
-} // end of wxvlc namespace
-
-#endif
+++ /dev/null
-/*****************************************************************************
- * preferences.cpp : wxWindows plugin for vlc
- *****************************************************************************
- * Copyright (C) 2000-2004 the VideoLAN team
- * $Id$
- *
- * 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., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
- *****************************************************************************/
-
-/*****************************************************************************
- * Preamble
- *****************************************************************************/
-
-#include "dialogs/preferences.hpp"
-#include <vlc_config_cat.h>
-#include "dialogs/preferences_widgets.h"
-
-#include <wx/combobox.h>
-#include <wx/statline.h>
-#include <wx/clntdata.h>
-#include <wx/dynarray.h>
-#include <wx/imaglist.h>
-#include <wx/treectrl.h>
-
-#include "bitmaps/type_net.xpm"
-#include "bitmaps/codec.xpm"
-#include "bitmaps/video.xpm"
-#include "bitmaps/type_playlist.xpm"
-#include "bitmaps/advanced.xpm"
-#include "bitmaps/intf.xpm"
-#include "bitmaps/audio.xpm"
-
-#ifndef wxRB_SINGLE
-# define wxRB_SINGLE 0
-#endif
-
-#define TYPE_CATEGORY 0
-#define TYPE_CATSUBCAT 1 /* Category with embedded subcategory */
-#define TYPE_SUBCATEGORY 2
-#define TYPE_MODULE 3
-
-/*****************************************************************************
- * Classes declarations.
- *****************************************************************************/
-class ConfigTreeData;
-class PrefsTreeCtrl : public wxTreeCtrl
-{
-public:
-
- PrefsTreeCtrl() { }
- PrefsTreeCtrl( wxWindow *parent, intf_thread_t *_p_intf,
- PrefsDialog *p_prefs_dialog, wxBoxSizer *_p_sizer );
- virtual ~PrefsTreeCtrl();
-
- void ApplyChanges();
- void CleanChanges();
-
-private:
- /* Event handlers (these functions should _not_ be virtual) */
- void OnSelectTreeItem( wxTreeEvent& event );
- void OnAdvanced( wxCommandEvent& event );
-
- ConfigTreeData *FindModuleConfig( ConfigTreeData *config_data );
-
- DECLARE_EVENT_TABLE()
-
- intf_thread_t *p_intf;
- PrefsDialog *p_prefs_dialog;
- wxBoxSizer *p_sizer;
- wxWindow *p_parent;
- bool b_advanced;
-
- wxPanel *p_current;
-
- wxTreeItemId root_item;
- wxTreeItemId plugins_item;
-};
-
-WX_DEFINE_ARRAY(ConfigControl *, ArrayOfConfigControls);
-
-class PrefsPanel : public wxPanel
-{
-public:
-
- PrefsPanel() { }
- PrefsPanel( wxWindow *parent, intf_thread_t *_p_intf,
- PrefsDialog *, ConfigTreeData* );
- virtual ~PrefsPanel() {}
-
- void ApplyChanges();
- void SwitchAdvanced( bool );
-
-private:
- intf_thread_t *p_intf;
- PrefsDialog *p_prefs_dialog;
-
- bool b_advanced;
-
- wxStaticText *hidden_text;
- wxBoxSizer *config_sizer;
- wxScrolledWindow *config_window;
-
- ArrayOfConfigControls config_array;
-};
-
-class ConfigTreeData : public wxTreeItemData
-{
-public:
-
- ConfigTreeData() { b_submodule = 0; panel = NULL; psz_name = NULL;
- psz_help = NULL; }
- virtual ~ConfigTreeData() {
- delete panel;
- free( psz_name );
- free( psz_help );
- };
-
- bool b_submodule;
-
- PrefsPanel *panel;
- wxBoxSizer *sizer;
-
- module_t *p_module;
- int i_object_id;
- int i_subcat_id;
- int i_type;
- char *psz_name;
- char *psz_help;
-};
-
-/*****************************************************************************
- * Event Table.
- *****************************************************************************/
-
-/* IDs for the controls and the menu commands */
-enum
-{
- Notebook_Event = wxID_HIGHEST,
- MRL_Event,
- ResetAll_Event,
- Advanced_Event,
-};
-
-BEGIN_EVENT_TABLE(PrefsDialog, wxFrame)
- /* Button events */
- EVT_BUTTON(wxID_OK, PrefsDialog::OnOk)
- EVT_BUTTON(wxID_CANCEL, PrefsDialog::OnCancel)
- EVT_BUTTON(wxID_SAVE, PrefsDialog::OnSave)
- EVT_BUTTON(ResetAll_Event, PrefsDialog::OnResetAll)
- EVT_CHECKBOX(Advanced_Event, PrefsDialog::OnAdvanced)
-
- /* Don't destroy the window when the user closes it */
- EVT_CLOSE(PrefsDialog::OnClose)
-END_EVENT_TABLE()
-
-// menu and control ids
-enum
-{
- PrefsTree_Ctrl = wxID_HIGHEST
-};
-
-BEGIN_EVENT_TABLE(PrefsTreeCtrl, wxTreeCtrl)
- EVT_TREE_SEL_CHANGED(PrefsTree_Ctrl, PrefsTreeCtrl::OnSelectTreeItem)
- EVT_COMMAND(Advanced_Event, wxEVT_USER_FIRST, PrefsTreeCtrl::OnAdvanced)
-END_EVENT_TABLE()
-
-/*****************************************************************************
- * Constructor.
- *****************************************************************************/
-PrefsDialog::PrefsDialog( intf_thread_t *_p_intf, wxWindow *p_parent)
- : wxFrame( p_parent, -1, wxU(_("Preferences")), wxDefaultPosition,
- wxSize(700,450), wxDEFAULT_FRAME_STYLE )
-{
- /* Initializations */
- p_intf = _p_intf;
- SetIcon( *p_intf->p_sys->p_icon );
-
- /* Create a panel to put everything in */
- wxPanel *panel = new wxPanel( this, -1 );
- panel->SetAutoLayout( TRUE );
-
- /* Create the preferences tree control */
- wxBoxSizer *controls_sizer = new wxBoxSizer( wxHORIZONTAL );
- prefs_tree =
- new PrefsTreeCtrl( panel, p_intf, this, controls_sizer );
-
- /* Separation */
- wxStaticLine *static_line = new wxStaticLine( panel, wxID_OK );
-
-#if 0
- /* Create the buttons */
- wxButton *ok_button = new wxButton( panel, wxID_OK, wxU(_("OK")) );
- ok_button->SetDefault();
-#endif
- wxButton *save_button = new wxButton( panel, wxID_SAVE, wxU(_("&Save")) );
- save_button->SetDefault();
- wxButton *cancel_button = new wxButton( panel, wxID_CANCEL,
- wxU(_("&Cancel")) );
- wxButton *reset_button = new wxButton( panel, ResetAll_Event,
- wxU(_("Reset All")) );
-
- wxPanel *dummy_panel = new wxPanel( this, -1 );
- wxCheckBox *advanced_checkbox =
- new wxCheckBox( panel, Advanced_Event, wxU(_("Advanced options")) );
-
- if( config_GetInt( p_intf, "advanced" ) )
- {
- advanced_checkbox->SetValue(TRUE);
- wxCommandEvent dummy_event;
- dummy_event.SetInt(TRUE);
- OnAdvanced( dummy_event );
- }
-
- /* Place everything in sizers */
- wxBoxSizer *button_sizer = new wxBoxSizer( wxHORIZONTAL );
-#if 0
- button_sizer->Add( ok_button, 0, wxALL, 5 );
-#endif
- button_sizer->Add( save_button, 0, wxALL, 5 );
- button_sizer->Add( cancel_button, 0, wxALL, 5 );
- button_sizer->Add( reset_button, 0, wxALL, 5 );
- button_sizer->Add( dummy_panel, 1, wxALL, 5 );
- button_sizer->Add( advanced_checkbox, 0, wxALL | wxALIGN_RIGHT |
- wxALIGN_CENTER_VERTICAL, 0 );
- button_sizer->Layout();
-
- wxBoxSizer *main_sizer = new wxBoxSizer( wxVERTICAL );
- wxBoxSizer *panel_sizer = new wxBoxSizer( wxVERTICAL );
- panel_sizer->Add( controls_sizer, 1, wxEXPAND | wxALL, 5 );
- panel_sizer->Add( static_line, 0, wxEXPAND | wxALL, 5 );
- panel_sizer->Add( button_sizer, 0, wxALIGN_LEFT | wxALIGN_BOTTOM |
- wxALL | wxEXPAND, 5 );
- panel_sizer->Layout();
- panel->SetSizer( panel_sizer );
- main_sizer->Add( panel, 1, wxEXPAND, 0 );
- main_sizer->Layout();
- SetSizer( main_sizer );
-}
-
-PrefsDialog::~PrefsDialog()
-{
-}
-
-/*****************************************************************************
- * Private methods.
- *****************************************************************************/
-
-
-/*****************************************************************************
- * Events methods.
- *****************************************************************************/
-void PrefsDialog::OnOk( wxCommandEvent& WXUNUSED(event) )
-{
- prefs_tree->ApplyChanges();
- this->Hide();
- prefs_tree->CleanChanges();
-}
-
-void PrefsDialog::OnClose( wxCloseEvent& WXUNUSED(event) )
-{
- wxCommandEvent cevent;
- OnCancel(cevent);
-}
-
-void PrefsDialog::OnCancel( wxCommandEvent& WXUNUSED(event) )
-{
- this->Hide();
- prefs_tree->CleanChanges();
-}
-
-void PrefsDialog::OnSave( wxCommandEvent& WXUNUSED(event) )
-{
- prefs_tree->ApplyChanges();
- config_SaveConfigFile( p_intf, NULL );
- this->Hide();
-}
-
-void PrefsDialog::OnResetAll( wxCommandEvent& WXUNUSED(event) )
-{
- wxMessageDialog dlg( this,
- wxU(_("This will reset your VLC media player preferences.\n"
- "Are you sure you want to continue?")),
- wxU(_("Reset Preferences")), wxYES_NO|wxNO_DEFAULT|wxCENTRE );
-
- if ( dlg.ShowModal() == wxID_YES )
- {
- /* TODO: need to reset all the controls */
- config_ResetAll( p_intf );
- prefs_tree->CleanChanges();
- config_SaveConfigFile( p_intf, NULL );
- }
-}
-
-void PrefsDialog::OnAdvanced( wxCommandEvent& event )
-{
- wxCommandEvent newevent( wxEVT_USER_FIRST, Advanced_Event );
- newevent.SetInt( event.GetInt() );
-
- prefs_tree->AddPendingEvent( newevent );
-}
-
-/*****************************************************************************
- * PrefsTreeCtrl class definition.
- *****************************************************************************/
-PrefsTreeCtrl::PrefsTreeCtrl( wxWindow *_p_parent, intf_thread_t *_p_intf,
- PrefsDialog *_p_prefs_dialog,
- wxBoxSizer *_p_sizer )
- : wxTreeCtrl( _p_parent, PrefsTree_Ctrl, wxDefaultPosition, wxSize(200,-1),
- wxTR_NO_LINES | wxTR_FULL_ROW_HIGHLIGHT |
- wxTR_LINES_AT_ROOT | wxTR_HIDE_ROOT |
- wxTR_HAS_BUTTONS | wxTR_TWIST_BUTTONS | wxSUNKEN_BORDER )
-{
- vlc_list_t *p_list = NULL;;
- module_t *p_module;
- module_config_t *p_item, *p_end;
- int i_index, i_image=0;
-
- /* Initializations */
- p_intf = _p_intf;
- p_prefs_dialog = _p_prefs_dialog;
- p_sizer = _p_sizer;
- p_parent = _p_parent;
- b_advanced = false;
-
- root_item = AddRoot( wxT("") );
- wxASSERT_MSG(root_item.IsOk(), wxT("Could not add root item"));
-
- wxImageList *p_images = new wxImageList( 16,16,TRUE );
- p_images->Add( wxIcon( audio_xpm ) );
- p_images->Add( wxIcon( video_xpm ) );
- p_images->Add( wxIcon( codec_xpm ) );
- p_images->Add( wxIcon( type_net_xpm ) );
- p_images->Add( wxIcon( advanced_xpm ) );
- p_images->Add( wxIcon( type_playlist_xpm ) );
- p_images->Add( wxIcon( intf_xpm ) );
- AssignImageList( p_images );
-
- /* List the plugins */
- p_list = vlc_list_find( p_intf, VLC_OBJECT_MODULE, FIND_ANYWHERE );
- if( !p_list ) return;
-
- /* Build the categories list */
- for( i_index = 0; i_index < p_list->i_count; i_index++ )
- {
- p_module = (module_t *)p_list->p_values[i_index].p_object;
- if( !strcmp( module_get_object(p_module), "main" ) )
- break;
- }
- if( i_index < p_list->i_count )
- {
- wxTreeItemId current_item;
- const char *psz_help;
- unsigned int i_confsize;
- module_config_t *p_config;
-
- /* We found the main module */
-
- /* Enumerate config categories and store a reference so we can
- * generate their config panel them when it is asked by the user. */
-
- p_config = module_config_get( p_module, &i_confsize );
- for( size_t i = 0; i < i_confsize; i++ )
- {
- module_config_t *p_item = p_config + i;
- ConfigTreeData *config_data;
- switch( p_item->i_type )
- {
- case CONFIG_CATEGORY:
- if( p_item->value.i == -1 ) break; // Don't display it
-
- config_data = new ConfigTreeData;
- config_data->psz_name = strdup( config_CategoryNameGet(
- p_item->value.i ) );
- psz_help = config_CategoryHelpGet( p_item->value.i );
- if( psz_help )
- {
- config_data->psz_help = wraptext( strdup( psz_help ), 72 );
- }
- else
- {
- config_data->psz_help = NULL;
- }
- config_data->i_type = TYPE_CATEGORY;
- config_data->i_object_id = p_item->value.i;
-
- /* Add the category to the tree */
- switch( p_item->value.i )
- {
- case CAT_AUDIO:
- i_image = 0; break;
- case CAT_VIDEO:
- i_image = 1; break;
- case CAT_INPUT:
- i_image = 2; break;
- case CAT_SOUT:
- i_image = 3; break;
- case CAT_ADVANCED:
- i_image = 4; break;
- case CAT_PLAYLIST:
- i_image = 5; break;
- case CAT_INTERFACE:
- i_image = 6; break;
- }
- current_item = AppendItem( root_item,
- wxU( _(config_data->psz_name) ),
- i_image, -1, config_data );
-
- break;
- case CONFIG_SUBCATEGORY:
- if( p_item->value.i == -1 ) break; // Don't display it
- /* Special case: move the "general" subcategories to their
- * parent category */
- if( p_item->value.i == SUBCAT_VIDEO_GENERAL ||
- p_item->value.i == SUBCAT_ADVANCED_MISC ||
- p_item->value.i == SUBCAT_INPUT_GENERAL ||
- p_item->value.i == SUBCAT_INTERFACE_GENERAL ||
- p_item->value.i == SUBCAT_SOUT_GENERAL||
- p_item->value.i == SUBCAT_PLAYLIST_GENERAL||
- p_item->value.i == SUBCAT_AUDIO_GENERAL )
- {
- ConfigTreeData *cd = (ConfigTreeData *)
- GetItemData( current_item );
- cd->i_type = TYPE_CATSUBCAT;
- cd->i_subcat_id = p_item->value.i;
- free( cd->psz_name );
- cd->psz_name = strdup( config_CategoryNameGet(
- p_item->value.i ) );
- free( cd->psz_help );
- const char *psz_help = config_CategoryHelpGet( p_item->value.i );
- if( psz_help )
- {
- cd->psz_help = wraptext( strdup( psz_help ), 72 );
- }
- else
- {
- cd->psz_help = NULL;
- }
- continue;
- }
-
- config_data = new ConfigTreeData;
-
- config_data->psz_name = strdup( config_CategoryNameGet(
- p_item->value.i ) );
- psz_help = config_CategoryHelpGet( p_item->value.i );
- if( psz_help )
- {
- config_data->psz_help = wraptext( strdup( psz_help ), 72 );
- }
- else
- {
- config_data->psz_help = NULL;
- }
- config_data->i_type = TYPE_SUBCATEGORY;
- config_data->i_object_id = p_item->value.i;
- /* WXMSW doesn't know image -1 ... FIXME */
- #ifdef __WXMSW__
- switch( p_item->value.i / 100 )
- {
- case CAT_AUDIO:
- i_image = 0; break;
- case CAT_VIDEO:
- i_image = 1; break;
- case CAT_INPUT:
- i_image = 2; break;
- case CAT_SOUT:
- i_image = 3; break;
- case CAT_ADVANCED:
- i_image = 4; break;
- case CAT_PLAYLIST:
- i_image = 5; break;
- case CAT_INTERFACE:
- i_image = 6; break;
- }
- #else
- i_image = -1;
- #endif
- AppendItem( current_item, wxU( _(config_data->psz_name) ),
- i_image, -1, config_data );
- break;
- }
- }
-
- module_config_free( p_config );
- }
-
-
- /*
- * Build a tree of all the plugins
- */
- for( i_index = 0; i_index < p_list->i_count; i_index++ )
- {
- int i_category = -1, i_subcategory = -1, i_options = 0;
- unsigned int i_confsize;
- module_config_t *p_config;
-
- p_module = (module_t *)p_list->p_values[i_index].p_object;
-
- /* Exclude the main module */
- if( !strcmp( module_get_object(p_module), "main" ) )
- continue;
-#if 0
- /* Exclude empty plugins (submodules don't have config options, they
- * are stored in the parent module) */
- if( module_IsSubModule(p_module) )
- continue;
-#endif
- p_config = module_config_get( p_module, &i_confsize );
- for( size_t i = 0; i < i_confsize; i++ )
- {
- module_config_t *p_item = p_config + i;
- if( p_item->i_type == CONFIG_CATEGORY )
- {
- i_category = p_item->value.i;
- }
- else if( p_item->i_type == CONFIG_SUBCATEGORY )
- {
- i_subcategory = p_item->value.i;
- }
- if( p_item->i_type & CONFIG_ITEM )
- i_options ++;
- if( i_options > 0 && i_category >= 0 && i_subcategory >= 0 )
- {
- break;
- }
- }
-
- if( !i_options ) continue;
-
- /* Find the right category item */
- wxTreeItemIdValue cookie;
- bool b_found = false;
-
- wxTreeItemId category_item = GetFirstChild( root_item , cookie);
- while( category_item.IsOk() )
- {
- ConfigTreeData *config_data =
- (ConfigTreeData *)GetItemData( category_item );
- if( config_data->i_object_id == i_category )
- {
- b_found = true;
- break;
- }
- category_item = GetNextChild( root_item, cookie );
- }
- if( !b_found ) continue;
-
- /* Find subcategory item */
- b_found = false;
- //cookie = -1;
- wxTreeItemId subcategory_item = GetFirstChild( category_item, cookie );
- while( subcategory_item.IsOk() )
- {
- ConfigTreeData *config_data =
- (ConfigTreeData *)GetItemData( subcategory_item );
- if( config_data->i_object_id == i_subcategory )
- {
- b_found = true;
- break;
- }
- subcategory_item = GetNextChild( category_item, cookie );
- }
- if( !b_found )
- {
- subcategory_item = category_item;
- }
-
- /* Add the plugin to the tree */
- ConfigTreeData *config_data = new ConfigTreeData;
-#if 0
- config_data->b_submodule = module_IsSubModule(p_module);
-#endif
- config_data->i_type = TYPE_MODULE;
- config_data->p_module = config_data->b_submodule ?
- ((module_t*)((vlc_object_t*)p_module)->p_parent) : p_module;
- config_data->psz_help = NULL;
-
- /* WXMSW doesn't know image -1 ... FIXME */
- #ifdef __WXMSW__
- switch( i_subcategory / 100 )
- {
- case CAT_AUDIO:
- i_image = 0; break;
- case CAT_VIDEO:
- i_image = 1; break;
- case CAT_INPUT:
- i_image = 2; break;
- case CAT_SOUT:
- i_image = 3; break;
- case CAT_ADVANCED:
- i_image = 4; break;
- case CAT_PLAYLIST:
- i_image = 5; break;
- case CAT_INTERFACE:
- i_image = 6; break;
- }
- #else
- i_image = -1;
- #endif
- AppendItem( subcategory_item, wxU( module_get_name(p_module, 0) ),
- i_image, -1, config_data );
- }
-
- /* Sort all this mess */
- wxTreeItemIdValue cookie;
- size_t i_child_index;
- wxTreeItemId capability_item = GetFirstChild( root_item, cookie);
- for( i_child_index = 0;
- (capability_item.IsOk() &&
- //(i_child_index < GetChildrenCount( plugins_item, FALSE )));
- (i_child_index < GetChildrenCount( root_item, FALSE )));
- i_child_index++ )
- {
- SortChildren( capability_item );
- //capability_item = GetNextChild( plugins_item, cookie );
- capability_item = GetNextChild( root_item, cookie );
- }
-
- /* Clean-up everything */
- vlc_list_release( p_list );
-
- p_sizer->Add( this, 1, wxEXPAND | wxALL, 0 );
- p_sizer->Layout();
-
- p_current = NULL;
-
- /* Update Tree Ctrl */
-#ifndef WIN32 /* Workaround a bug in win32 implementation */
- SelectItem( GetFirstChild( root_item, cookie ) );
-#endif
-
- //cannot expand hidden root item
- //Expand( root_item );
-}
-
-PrefsTreeCtrl::~PrefsTreeCtrl(){
-}
-
-void PrefsTreeCtrl::ApplyChanges()
-{
- wxTreeItemIdValue cookie, cookie2, cookie3;
- ConfigTreeData *config_data;
-
- wxTreeItemId category = GetFirstChild( root_item, cookie );
- while( category.IsOk() )
- {
- wxTreeItemId subcategory = GetFirstChild( category, cookie2 );
- while( subcategory.IsOk() )
- {
- wxTreeItemId module = GetFirstChild( subcategory, cookie3 );
- while( module.IsOk() )
- {
- config_data = (ConfigTreeData *)GetItemData( module );
- if( config_data && config_data->panel )
- {
- config_data->panel->ApplyChanges();
- }
- module = GetNextChild( subcategory, cookie3 );
- }
- config_data = (ConfigTreeData *)GetItemData( subcategory );
- if( config_data && config_data->panel )
- {
- config_data->panel->ApplyChanges();
- }
- subcategory = GetNextChild( category, cookie2 );
- }
- config_data = (ConfigTreeData *)GetItemData( category );
- if( config_data && config_data->panel )
- {
- config_data->panel->ApplyChanges();
- }
- category = GetNextChild( root_item, cookie );
- }
-}
-
-void PrefsTreeCtrl::CleanChanges()
-{
- wxTreeItemIdValue cookie, cookie2, cookie3;
- ConfigTreeData *config_data;
-
- config_data = !GetSelection() ? NULL :
- FindModuleConfig( (ConfigTreeData *)GetItemData( GetSelection() ) );
- if( config_data )
- {
- config_data->panel->Hide();
-#if (wxCHECK_VERSION(2,5,0))
- p_sizer->Detach( config_data->panel );
-#else
- p_sizer->Remove( config_data->panel );
-#endif
- p_current = NULL;
- }
-
- wxTreeItemId category = GetFirstChild( root_item, cookie );
- while( category.IsOk() )
- {
- wxTreeItemId subcategory = GetFirstChild( category, cookie2 );
- while( subcategory.IsOk() )
- {
- wxTreeItemId module = GetFirstChild( subcategory, cookie3 );
- while( module.IsOk() )
- {
- config_data = (ConfigTreeData *)GetItemData( module );
- if( config_data && config_data->panel )
- {
- delete config_data->panel;
- config_data->panel = NULL;
- }
- module = GetNextChild( subcategory, cookie3 );
- }
- config_data = (ConfigTreeData *)GetItemData( subcategory );
- if( config_data && config_data->panel )
- {
- delete config_data->panel;
- config_data->panel = NULL;
- }
- subcategory = GetNextChild( category, cookie2 );
- }
- config_data = (ConfigTreeData *)GetItemData( category );
- if( config_data && config_data->panel )
- {
- delete config_data->panel;
- config_data->panel = NULL;
- }
- category = GetNextChild( root_item, cookie );
- }
-
- if( GetSelection() )
- {
- wxTreeEvent event;
- OnSelectTreeItem( event );
- }
-}
-
-ConfigTreeData *PrefsTreeCtrl::FindModuleConfig( ConfigTreeData *config_data )
-{
- /* We need this complexity because submodules don't have their own config
- * options. They use the parent module ones. */
-
- if( !config_data || !config_data->b_submodule )
- {
- return config_data;
- }
-
- wxTreeItemIdValue cookie, cookie2, cookie3;
- ConfigTreeData *config_new;
- wxTreeItemId category = GetFirstChild( root_item, cookie );
- while( category.IsOk() )
- {
- wxTreeItemId subcategory = GetFirstChild( category, cookie2 );
- while( subcategory.IsOk() )
- {
- wxTreeItemId module = GetFirstChild( subcategory, cookie3 );
- while( module.IsOk() )
- {
- config_new = (ConfigTreeData *)GetItemData( module );
- if( config_new && !config_new->b_submodule &&
- config_new->p_module == config_data->p_module )
- {
- return config_new;
- }
- module = GetNextChild( subcategory, cookie3 );
- }
- subcategory = GetNextChild( category, cookie2 );
- }
- category = GetNextChild( root_item, cookie );
- }
-
- /* Found nothing */
- return NULL;
-}
-
-void PrefsTreeCtrl::OnSelectTreeItem( wxTreeEvent& event )
-{
- ConfigTreeData *config_data = NULL;
-
- if( p_current )
- {
- p_current->Hide();
-#if (wxCHECK_VERSION(2,5,0))
- p_sizer->Detach( p_current );
-#else
- p_sizer->Remove( p_current );
-#endif
- p_current = NULL;
- }
-
- /* Don't use event.GetItem() because we also send fake events */
- config_data = FindModuleConfig( (ConfigTreeData *)GetItemData(
- GetSelection() ) );
- if( config_data )
- {
- if( !config_data->panel )
- {
- /* The panel hasn't been created yet. Let's do it. */
- config_data->panel =
- new PrefsPanel( p_parent, p_intf, p_prefs_dialog,
- config_data );
- config_data->panel->SwitchAdvanced( b_advanced );
- }
- else
- {
- config_data->panel->SwitchAdvanced( b_advanced );
- config_data->panel->Show();
- }
-
- p_current = config_data->panel;
-
- p_sizer->Add( config_data->panel, 3, wxEXPAND | wxALL, 0 );
- p_sizer->Layout();
- }
-}
-
-void PrefsTreeCtrl::OnAdvanced( wxCommandEvent& event )
-{
- b_advanced = event.GetInt();
-
- ConfigTreeData *config_data = !GetSelection() ? NULL :
- FindModuleConfig( (ConfigTreeData *)GetItemData( GetSelection() ) );
- if( config_data )
- {
- config_data->panel->Hide();
-#if (wxCHECK_VERSION(2,5,0))
- p_sizer->Detach( config_data->panel );
-#else
- p_sizer->Remove( config_data->panel );
-#endif
- p_current = NULL;
- }
-
- if( GetSelection() )
- {
- wxTreeEvent event;
- OnSelectTreeItem( event );
- }
-}
-
-/*****************************************************************************
- * PrefsPanel class definition.
- *****************************************************************************/
-PrefsPanel::PrefsPanel( wxWindow* parent, intf_thread_t *_p_intf,
- PrefsDialog *_p_prefs_dialog,
- ConfigTreeData *config_data )
- : wxPanel( parent, -1, wxDefaultPosition, wxDefaultSize )
-{
- module_config_t *p_item, *p_start, *p_end;
- unsigned int i_confsize;
- vlc_list_t *p_list = NULL;;
-
- wxStaticText *label;
- wxStaticText *help;
- wxArrayString array;
-
- module_t *p_module = NULL;
-
- /* Initializations */
- p_intf = _p_intf;
- p_prefs_dialog =_p_prefs_dialog,
-
- b_advanced = true;
- SetAutoLayout( TRUE );
- Hide();
-
- wxBoxSizer *sizer = new wxBoxSizer( wxVERTICAL );
-
-
- if( config_data->i_type == TYPE_CATEGORY )
- {
- label = new wxStaticText( this, -1,wxU(_( config_data->psz_name )));
- wxFont heading_font = label->GetFont();
- heading_font.SetPointSize( heading_font.GetPointSize() + 5 );
- label->SetFont( heading_font );
- sizer->Add( label, 0, wxEXPAND | wxLEFT, 10 );
- sizer->Add( new wxStaticLine( this, 0 ), 0,
- wxEXPAND | wxLEFT | wxRIGHT, 2 );
-
- hidden_text = NULL;
- help = new wxStaticText( this, -1, wxU(_( config_data->psz_help ) ) );
- sizer->Add( help ,0 ,wxEXPAND | wxALL, 5 );
-
- config_sizer = NULL; config_window = NULL;
- }
- else
- {
- /* Get a pointer to the module */
- if( config_data->i_type == TYPE_MODULE )
- {
- p_module = config_data->p_module;
- }
- else
- {
- /* List the plugins */
- int i_index;
- bool b_found = false;
- p_list = vlc_list_find( p_intf, VLC_OBJECT_MODULE, FIND_ANYWHERE );
- if( !p_list ) return;
-
- for( i_index = 0; i_index < p_list->i_count; i_index++ )
- {
- p_module = (module_t *)p_list->p_values[i_index].p_object;
- if( !strcmp( module_get_object(p_module), "main" ) )
- {
- b_found = true;
- break;
- }
- }
- if( !p_module && !b_found )
- {
- msg_Warn( p_intf, "unable to create preferences "
- "(main module not found)" );
- return;
- }
- }
-
- /* Enumerate config options and add corresponding config boxes
- * (submodules don't have config options, they are stored in the
- * parent module) */
-#if 0
- if( module_IsSubModule(p_module) )
- p_start = module_config_get((module_t *)(((vlc_object_t *)p_module)->p_parent), &i_confsize);
- else
-#endif
- p_start = module_config_get(p_module, &i_confsize);
-
- p_item = p_start;
- p_end = p_start + i_confsize;
-
- /* Find the category if it has been specified */
- if( config_data->i_type == TYPE_SUBCATEGORY ||
- config_data->i_type == TYPE_CATSUBCAT )
- {
- for( ; p_item && p_item < p_end; p_item++ )
- {
- if( p_item->i_type == CONFIG_SUBCATEGORY &&
- ( config_data->i_type == TYPE_SUBCATEGORY &&
- p_item->value.i == config_data->i_object_id ) ||
- ( config_data->i_type == TYPE_CATSUBCAT &&
- p_item->value.i == config_data->i_subcat_id ) )
- {
- break;
- }
- }
- }
-
- /* Add a head title to the panel */
- const char *psz_head;
- if( config_data->i_type == TYPE_SUBCATEGORY ||
- config_data->i_type == TYPE_CATSUBCAT )
- {
- psz_head = config_data->psz_name;
- p_item++;
- }
- else
- {
- psz_head = module_GetLongName(p_module);
- }
-
- label = new wxStaticText( this, -1,
- wxU(_( psz_head ? psz_head : _("Unknown") ) ) );
- wxFont heading_font = label->GetFont();
- heading_font.SetPointSize( heading_font.GetPointSize() + 5 );
- label->SetFont( heading_font );
- sizer->Add( label, 0, wxEXPAND | wxLEFT, 10 );
- sizer->Add( new wxStaticLine( this, 0 ), 0,
- wxEXPAND | wxLEFT | wxRIGHT, 2 );
-
- /* Now put all the config options into a scrolled window */
- config_sizer = new wxBoxSizer( wxVERTICAL );
- config_window = new wxScrolledWindow( this, -1, wxDefaultPosition,
- wxDefaultSize, wxBORDER_NONE | wxHSCROLL | wxVSCROLL );
- config_window->SetAutoLayout( TRUE );
- config_window->SetScrollRate( 5, 5 );
-
- for( ; p_item && p_item < p_end; p_item++ )
- {
- /* If a category has been specified, check we finished the job */
- if( ( ( config_data->i_type == TYPE_SUBCATEGORY &&
- p_item->value.i != config_data->i_object_id ) ||
- ( config_data->i_type == TYPE_CATSUBCAT &&
- p_item->value.i != config_data->i_subcat_id ) ) &&
- (p_item->i_type == CONFIG_CATEGORY ||
- p_item->i_type == CONFIG_SUBCATEGORY ) )
- break;
-
- ConfigControl *control =
- CreateConfigControl( VLC_OBJECT(p_intf),
- p_item, config_window );
-
- /* Don't add items that were not recognized */
- if( control == NULL ) continue;
-
- /* Add the config data to our array so we can keep a trace of it */
- config_array.Add( control );
-
- config_sizer->Add( control, 0, wxEXPAND | wxALL, 2 );
- }
-
- module_config_free( p_start );
-
- config_sizer->Layout();
- config_window->SetSizer( config_sizer );
- sizer->Add( config_window, 1, wxEXPAND | wxALL, 5 );
- hidden_text = new wxStaticText( this, -1,
- wxU( _( "Some options are available but hidden. " \
- "Check \"Advanced options\" to see them." ) ) );
- sizer->Add( hidden_text );
-
- /* And at last put a useful help string if available */
- if( config_data->psz_help && *config_data->psz_help )
- {
- sizer->Add( new wxStaticLine( this, 0 ), 0,
- wxEXPAND | wxLEFT | wxRIGHT, 2 );
- help = new wxStaticText( this, -1, wxU(_(config_data->psz_help)),
- wxDefaultPosition, wxDefaultSize,
- wxALIGN_LEFT,
- wxT("") );
- sizer->Add( help ,0 ,wxEXPAND | wxALL, 5 );
- }
-
- if( config_data->i_type == TYPE_MODULE )
- {
- module_release (p_module);
- }
- else
- {
- vlc_list_release( p_list );
- }
- }
- sizer->Layout();
- SetSizer( sizer );
- Show();
-}
-
-void PrefsPanel::ApplyChanges()
-{
- vlc_value_t val;
-
- for( size_t i = 0; i < config_array.GetCount(); i++ )
- {
- ConfigControl *control = config_array.Item(i);
-
- switch( control->GetType() )
- {
- case CONFIG_ITEM_STRING:
- case CONFIG_ITEM_FILE:
- case CONFIG_ITEM_DIRECTORY:
- case CONFIG_ITEM_MODULE:
- case CONFIG_ITEM_MODULE_CAT:
- case CONFIG_ITEM_MODULE_LIST:
- case CONFIG_ITEM_MODULE_LIST_CAT:
- config_PutPsz( p_intf, control->GetName().mb_str(wxConvUTF8),
- control->GetPszValue().mb_str(wxConvUTF8) );
- break;
- case CONFIG_ITEM_KEY:
- /* So you don't need to restart to have the changes take effect */
- val.i_int = control->GetIntValue();
- var_Set( p_intf->p_libvlc, control->GetName().mb_str(wxConvUTF8), val );
- case CONFIG_ITEM_INTEGER:
- case CONFIG_ITEM_BOOL:
- config_PutInt( p_intf, control->GetName().mb_str(wxConvUTF8),
- control->GetIntValue() );
- break;
- case CONFIG_ITEM_FLOAT:
- config_PutFloat( p_intf, control->GetName().mb_str(wxConvUTF8),
- control->GetFloatValue() );
- break;
- }
- }
-}
-
-void PrefsPanel::SwitchAdvanced( bool b_new_advanced )
-{
- bool hidden = false;
-
- if( b_advanced == b_new_advanced )
- {
- goto hide;
- }
-
- if( config_sizer && config_window )
- {
- b_advanced = b_new_advanced;
-
- for( size_t i = 0; i < config_array.GetCount(); i++ )
- {
- ConfigControl *control = config_array.Item(i);
- if( control->IsAdvanced() )
- {
- if( !b_advanced ) hidden = true;
- control->Show( b_advanced );
- config_sizer->Show( control, b_advanced );
- }
- }
-
- config_sizer->Layout();
- config_window->FitInside();
- config_window->Refresh();
- }
-hide:
- if( hidden && hidden_text )
- {
- hidden_text->Show( true );
- config_sizer->Show( hidden_text, true );
- }
- else if ( hidden_text )
- {
- hidden_text->Show( false );
- config_sizer->Show( hidden_text, false );
- }
- return;
-}
+++ /dev/null
-/*****************************************************************************
- * preferences.hpp : Headers for the preference dialog
- *****************************************************************************
- * Copyright (C) 1999-2005 the VideoLAN team
- * $Id$
- *
- * Authors: Gildas Bazin <gbazin@videolan.org>
- *
- * 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., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
- *****************************************************************************/
-
-#ifndef _WXVLC_PREFERENCES_H_
-#define _WXVLC_PREFERENCES_H_
-
-#include "wxwidgets.hpp"
-
-class PrefsTreeCtrl;
-class PrefsPanel;
-
-namespace wxvlc
-{
- /** This class is the preferences window
- * It includes a preferences panel (right part)
- * and the PrefsTreeCtrl (left part)
- */
- class PrefsDialog: public wxFrame
- {
- public:
- /** Constructor */
- PrefsDialog( intf_thread_t *p_intf, wxWindow *p_parent );
- virtual ~PrefsDialog();
-
- private:
- wxPanel *PrefsPanel( wxWindow* parent );
-
- /* Event handlers (these functions should _not_ be virtual) */
- void OnOk( wxCommandEvent& event );
- void OnCancel( wxCommandEvent& event );
- void OnSave( wxCommandEvent& event );
- void OnResetAll( wxCommandEvent& event );
- void OnAdvanced( wxCommandEvent& event );
- void OnClose( wxCloseEvent& event );
-
- DECLARE_EVENT_TABLE();
-
- intf_thread_t *p_intf;
-
- PrefsTreeCtrl *prefs_tree;
- };
-
-};
-
-#endif
-
+++ /dev/null
-/*****************************************************************************
- * preferences_widgets.cpp : wxWindows plugin for vlc
- *****************************************************************************
- * Copyright (C) 2000-2004 the VideoLAN team
- * $Id$
- *
- * Authors: Gildas Bazin <gbazin@videolan.org>
- * Sigmund Augdal Helberg <dnumgis@videolan.org>
- *
- * 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., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
- *****************************************************************************/
-
-#include "wxwidgets.hpp"
-#include "preferences_widgets.h"
-#include <vlc_keys.h>
-#include <vlc_config_cat.h>
-
-#include <wx/statline.h>
-#include <wx/spinctrl.h>
-
-/*****************************************************************************
- * CreateConfigControl wrapper
- *****************************************************************************/
-ConfigControl *CreateConfigControl( vlc_object_t *p_this,
- module_config_t *p_item, wxWindow *parent )
-{
- ConfigControl *p_control = NULL;
-
- switch( p_item->i_type )
- {
- case CONFIG_ITEM_MODULE:
- p_control = new ModuleConfigControl( p_this, p_item, parent );
- break;
- case CONFIG_ITEM_MODULE_CAT:
- p_control = new ModuleCatConfigControl( p_this, p_item, parent );
- break;
- case CONFIG_ITEM_MODULE_LIST_CAT:
- p_control = new ModuleListCatConfigControl( p_this, p_item, parent );
- break;
-
- case CONFIG_ITEM_STRING:
- if( !p_item->i_list )
- {
- p_control = new StringConfigControl( p_this, p_item, parent );
- }
- else
- {
- p_control = new StringListConfigControl( p_this, p_item, parent );
- }
- break;
-
- case CONFIG_ITEM_FILE:
- case CONFIG_ITEM_DIRECTORY:
- p_control = new FileConfigControl( p_this, p_item, parent );
- break;
-
- case CONFIG_ITEM_INTEGER:
- if( p_item->i_list )
- {
- p_control = new IntegerListConfigControl( p_this, p_item, parent );
- }
- else if( p_item->min.i != 0 || p_item->max.i != 0 )
- {
- p_control = new RangedIntConfigControl( p_this, p_item, parent );
- }
- else
- {
- p_control = new IntegerConfigControl( p_this, p_item, parent );
- }
- break;
-
- case CONFIG_ITEM_KEY:
- p_control = new KeyConfigControl( p_this, p_item, parent );
- break;
-
- case CONFIG_ITEM_FLOAT:
- p_control = new FloatConfigControl( p_this, p_item, parent );
- break;
-
- case CONFIG_ITEM_BOOL:
- p_control = new BoolConfigControl( p_this, p_item, parent );
- break;
-
- case CONFIG_SECTION:
- p_control = new SectionConfigControl( p_this, p_item, parent );
- break;
-
- default:
- break;
- }
-
- return p_control;
-}
-
-/*****************************************************************************
- * ConfigControl implementation
- *****************************************************************************/
-ConfigControl::ConfigControl( vlc_object_t *_p_this,
- module_config_t *p_item, wxWindow *parent )
- : wxPanel( parent ), p_this( _p_this ),
- pf_update_callback( NULL ), p_update_data( NULL ),
- name( wxU(p_item->psz_name) ), i_type( p_item->i_type ),
- b_advanced( p_item->b_advanced )
-
-{
- sizer = new wxBoxSizer( wxHORIZONTAL );
-}
-
-ConfigControl::~ConfigControl()
-{
-}
-
-wxSizer *ConfigControl::Sizer()
-{
- return sizer;
-}
-
-wxString ConfigControl::GetName()
-{
- return name;
-}
-
-int ConfigControl::GetType()
-{
- return i_type;
-}
-
-bool ConfigControl::IsAdvanced()
-{
- return b_advanced;
-}
-
-void ConfigControl::SetUpdateCallback( void (*p_callback)( void * ),
- void *p_data )
-{
- pf_update_callback = p_callback;
- p_update_data = p_data;
-}
-
-void ConfigControl::OnUpdate( wxCommandEvent& WXUNUSED(event) )
-{
- if( pf_update_callback )
- {
- pf_update_callback( p_update_data );
- }
-}
-
-void ConfigControl::OnUpdateScroll( wxScrollEvent& WXUNUSED(event) )
-{
- wxCommandEvent cevent;
- OnUpdate(cevent);
-}
-
-
-/*****************************************************************************
- * KeyConfigControl implementation
- *****************************************************************************/
-wxString *KeyConfigControl::m_keysList = NULL;
-
-KeyConfigControl::KeyConfigControl( vlc_object_t *p_this,
- module_config_t *p_item, wxWindow *parent )
- : ConfigControl( p_this, p_item, parent )
-{
- // Number of keys descriptions
- unsigned int i_keys = sizeof(vlc_keys)/sizeof(key_descriptor_t);
-
- // Init the keys decriptions array
- if( m_keysList == NULL )
- {
- m_keysList = new wxString[i_keys];
- for( unsigned int i = 0; i < i_keys; i++ )
- {
- m_keysList[i] = wxU(vlc_keys[i].psz_key_string);
- }
- }
-
- label = new wxStaticText(this, -1, wxU(p_item->psz_text));
- alt = new wxCheckBox( this, -1, wxU(_("Alt")) );
- alt->SetValue( p_item->value.i & KEY_MODIFIER_ALT );
- ctrl = new wxCheckBox( this, -1, wxU(_("Ctrl")) );
- ctrl->SetValue( p_item->value.i & KEY_MODIFIER_CTRL );
- shift = new wxCheckBox( this, -1, wxU(_("Shift")) );
- shift->SetValue( p_item->value.i & KEY_MODIFIER_SHIFT );
- combo = new wxComboBox( this, -1, wxT(""), wxDefaultPosition,
- wxDefaultSize, i_keys, m_keysList,
- wxCB_READONLY );
- for( unsigned int i = 0; i < i_keys; i++ )
- {
- combo->SetClientData( i, (void*)vlc_keys[i].i_key_code );
- if( (unsigned int)vlc_keys[i].i_key_code ==
- ( ((unsigned int)p_item->value.i) & ~KEY_MODIFIER ) )
- {
- combo->SetSelection( i );
- combo->SetValue( wxU(_(vlc_keys[i].psz_key_string)) );
- }
- }
-
- sizer->Add( label, 2, wxALIGN_CENTER_VERTICAL | wxALL | wxEXPAND, 5 );
- sizer->Add( alt, 1, wxALIGN_CENTER_VERTICAL | wxALL | wxEXPAND, 5 );
- sizer->Add( ctrl, 1, wxALIGN_CENTER_VERTICAL | wxALL | wxEXPAND, 5 );
- sizer->Add( shift, 1, wxALIGN_CENTER_VERTICAL | wxALL | wxEXPAND, 5 );
- sizer->Add( combo, 2, wxALIGN_CENTER_VERTICAL | wxALL | wxEXPAND, 5 );
- sizer->Layout();
- this->SetSizerAndFit( sizer );
-}
-
-KeyConfigControl::~KeyConfigControl()
-{
- if( m_keysList )
- {
- delete[] m_keysList;
- m_keysList = NULL;
- }
-}
-
-int KeyConfigControl::GetIntValue()
-{
- int result = 0;
- if( alt->IsChecked() )
- {
- result |= KEY_MODIFIER_ALT;
- }
- if( ctrl->IsChecked() )
- {
- result |= KEY_MODIFIER_CTRL;
- }
- if( shift->IsChecked() )
- {
- result |= KEY_MODIFIER_SHIFT;
- }
- int selected = combo->GetSelection();
- if( selected != -1 )
- {
- result |= (int)combo->GetClientData( selected );
- }
- return result;
-}
-
-/*****************************************************************************
- * ModuleConfigControl implementation
- *****************************************************************************/
-ModuleConfigControl::ModuleConfigControl( vlc_object_t *p_this,
- module_config_t *p_item,
- wxWindow *parent )
- : ConfigControl( p_this, p_item, parent )
-{
- vlc_list_t *p_list;
- module_t *p_parser;
-
- label = new wxStaticText(this, -1, wxU(p_item->psz_text));
- combo = new wxComboBox( this, -1, wxL2U(p_item->value.psz),
- wxDefaultPosition, wxDefaultSize,
- 0, NULL, wxCB_READONLY | wxCB_SORT );
-
- /* build a list of available modules */
- p_list = vlc_list_find( p_this, VLC_OBJECT_MODULE, FIND_ANYWHERE );
- combo->Append( wxU(_("Default")), (void *)NULL );
- combo->SetSelection( 0 );
- for( int i_index = 0; i_index < p_list->i_count; i_index++ )
- {
- p_parser = (module_t *)p_list->p_values[i_index].p_object ;
-
- if( module_provides( p_parser, p_item->psz_type ) )
- {
- combo->Append( wxU(module_GetLongName(p_parser)),
- (char *)module_get_object(p_parser) );
- if( p_item->value.psz && !strcmp(p_item->value.psz,
- module_get_object(p_parser)) )
- combo->SetValue( wxU(module_GetLongName(p_parser)) );
- }
- }
- vlc_list_release( p_list );
-
- combo->SetToolTip( wxU(p_item->psz_longtext) );
- sizer->Add( label, 1, wxALIGN_CENTER_VERTICAL | wxALL, 5 );
- sizer->Add( combo, 1, wxALIGN_CENTER_VERTICAL | wxALL, 5 );
- sizer->Layout();
- this->SetSizerAndFit( sizer );
-}
-
-ModuleCatConfigControl::~ModuleCatConfigControl()
-{
- ;
-}
-
-wxString ModuleCatConfigControl::GetPszValue()
-{
- return wxU( (char *)combo->GetClientData( combo->GetSelection() ));
-}
-
-/*****************************************************************************
- * ModuleCatConfigControl implementation
- *****************************************************************************/
-ModuleCatConfigControl::ModuleCatConfigControl( vlc_object_t *p_this,
- module_config_t *p_item,
- wxWindow *parent )
- : ConfigControl( p_this, p_item, parent )
-{
- vlc_list_t *p_list;
- module_t *p_parser;
-
- label = new wxStaticText(this, -1, wxU(p_item->psz_text));
- combo = new wxComboBox( this, -1, wxL2U(p_item->value.psz),
- wxDefaultPosition, wxDefaultSize,
- 0, NULL, wxCB_READONLY | wxCB_SORT );
-
- combo->Append( wxU(_("Default")), (void *)NULL );
- combo->SetSelection( 0 );
-
- /* build a list of available modules */
- p_list = vlc_list_find( p_this, VLC_OBJECT_MODULE, FIND_ANYWHERE );
- for( int i_index = 0; i_index < p_list->i_count; i_index++ )
- {
- p_parser = (module_t *)p_list->p_values[i_index].p_object ;
-
- if( !strcmp( module_get_object(p_parser), "main" ) )
- continue;
-
- unsigned int i_confsize;
- module_config_t *p_config, *p_start, *p_end;
- p_start = module_config_get( p_parser, &i_confsize );
- p_end = p_start + i_confsize;
-
- for( p_config = p_start; p_config < p_end; p_config++ )
- {
- /* Hack: required subcategory is stored in min.i */
- if( p_config->i_type == CONFIG_SUBCATEGORY &&
- p_config->value.i == p_item->min.i )
- {
- combo->Append( wxU(module_GetLongName(p_parser)),
- (char *)module_get_object(p_parser) );
- if( p_item->value.psz &&
- !strcmp(p_item->value.psz, module_get_object(p_parser)) )
- combo->SetValue( wxU(module_GetLongName(p_parser)) );
- }
- }
-
- module_config_free( p_start );
- }
- vlc_list_release( p_list );
-
- combo->SetToolTip( wxU(p_item->psz_longtext) );
- sizer->Add( label, 1, wxALIGN_CENTER_VERTICAL | wxALL, 5 );
- sizer->Add( combo, 1, wxALIGN_CENTER_VERTICAL | wxALL, 5 );
- sizer->Layout();
- this->SetSizerAndFit( sizer );
-}
-
-ModuleConfigControl::~ModuleConfigControl()
-{
- ;
-}
-
-wxString ModuleConfigControl::GetPszValue()
-{
- return wxU( (char *)combo->GetClientData( combo->GetSelection() ));
-}
-
-
-/*****************************************************************************
- * ModuleListCatonfigControl implementation
- *****************************************************************************/
-BEGIN_EVENT_TABLE(ModuleListCatConfigControl, wxPanel)
- EVT_CHECKBOX( wxID_HIGHEST , ModuleListCatConfigControl::OnUpdate )
-END_EVENT_TABLE()
-
-
-ModuleListCatConfigControl::ModuleListCatConfigControl( vlc_object_t *p_this,
- module_config_t *p_item,
- wxWindow *parent )
- : ConfigControl( p_this, p_item, parent )
-{
- vlc_list_t *p_list;
- module_t *p_parser;
-
- delete sizer;
- sizer = new wxBoxSizer( wxVERTICAL );
- label = new wxStaticText(this, -1, wxU(p_item->psz_text));
- sizer->Add( label );
-
- text = new wxTextCtrl( this, -1, wxU(p_item->value.psz),
- wxDefaultPosition,wxSize( 300, 20 ) );
-
-
- /* build a list of available modules */
- p_list = vlc_list_find( p_this, VLC_OBJECT_MODULE, FIND_ANYWHERE );
- for( int i_index = 0; i_index < p_list->i_count; i_index++ )
- {
- p_parser = (module_t *)p_list->p_values[i_index].p_object ;
-
- if( !strcmp( module_get_object(p_parser), "main" ) )
- continue;
-
- unsigned int i_confsize;
- module_config_t *p_config, *p_start, *p_end;
-
- p_start = module_config_get( p_parser, &i_confsize );
- p_end = p_start + i_confsize;
-
- for( p_config = p_start; p_config < p_end; p_config++ )
- {
- /* Hack: required subcategory is stored in min.i */
- if( p_config->i_type == CONFIG_SUBCATEGORY &&
- p_config->value.i == p_item->min.i )
- {
- moduleCheckBox *mc = new moduleCheckBox;
- mc->checkbox =
- new wxCheckBox( this, wxID_HIGHEST,
- wxU(module_GetLongName(p_parser)) );
-
- mc->psz_module = strdup( module_get_object(p_parser) );
- pp_checkboxes.push_back( mc );
-
- if( p_item->value.psz &&
- strstr( p_item->value.psz, mc->psz_module ) )
- {
- mc->checkbox->SetValue( true );
- }
- sizer->Add( mc->checkbox );
- }
- }
-
- module_config_free( p_start );
- }
- vlc_list_release( p_list );
-
- text->SetToolTip( wxU(p_item->psz_longtext) );
- sizer->Add(text, 0, wxEXPAND|wxALL, 5 );
-
- sizer->Add (new wxStaticText( this, -1, wxU( vlc_wraptext( _("Select "
- "the desired modules. For more advanced control, the "
- "resulting \"chain\" can be modified.") , 72 ) ) ) );
-
- sizer->Layout();
- this->SetSizerAndFit( sizer );
-}
-
-ModuleListCatConfigControl::~ModuleListCatConfigControl()
-{
- ;
-}
-
-wxString ModuleListCatConfigControl::GetPszValue()
-{
- return text->GetValue() ;
-}
-
-void ModuleListCatConfigControl::OnUpdate( wxCommandEvent &event )
-{
- bool b_waschecked = false;
- wxString newtext = text->GetValue();
-
- for( unsigned int i = 0 ; i< pp_checkboxes.size() ; i++ )
- {
- b_waschecked = newtext.Find( wxT(":")+wxU(pp_checkboxes[i]->psz_module)+wxT(":")) != -1 || newtext.BeforeFirst( ':' ) == wxString(wxU(pp_checkboxes[i]->psz_module)) || newtext.AfterLast( ':' ) == wxString(wxU(pp_checkboxes[i]->psz_module));
- /* For some reasons, ^^ doesn't compile :( */
- if( (pp_checkboxes[i]->checkbox->IsChecked() && ! b_waschecked )||
- (! pp_checkboxes[i]->checkbox->IsChecked() && b_waschecked) )
- {
- if( b_waschecked )
- {
- /* Maybe not the clest solution */
- if( ! newtext.Replace(wxString(wxT(":"))
- +wxU(pp_checkboxes[i]->psz_module)+wxT(":"),
- wxT(":")))
- {
- if( newtext.BeforeFirst( ':' ) == wxString(wxU(pp_checkboxes[i]->psz_module)) )
- {
- newtext = newtext.AfterFirst( ':' );
- }
- else if( newtext.AfterLast( ':' ) == wxString(wxU(pp_checkboxes[i]->psz_module)) )
- {
- newtext = newtext.BeforeLast( ':' );
- }
- else if( newtext == wxString(wxU(pp_checkboxes[i]->psz_module)) )
- {
- newtext = wxT("");
- }
- else
- {
- newtext.Replace(wxU(pp_checkboxes[i]->psz_module),wxU(""));
- }
- }
- }
- else
- {
- if( newtext.Len() == 0 )
- {
- newtext = wxU(pp_checkboxes[i]->psz_module);
- }
- else
- {
- newtext += wxU( ":" );
- newtext += wxU(pp_checkboxes[i]->psz_module);
- }
- }
- }
- }
- text->SetValue( newtext );
-}
-
-/*****************************************************************************
- * StringConfigControl implementation
- *****************************************************************************/
-StringConfigControl::StringConfigControl( vlc_object_t *p_this,
- module_config_t *p_item,
- wxWindow *parent )
- : ConfigControl( p_this, p_item, parent )
-{
- label = new wxStaticText(this, -1, wxU(p_item->psz_text));
- sizer->Add( label, 1, wxALIGN_CENTER_VERTICAL | wxALL, 5 );
- textctrl = new wxTextCtrl( this, -1,
- wxL2U(p_item->value.psz),
- wxDefaultPosition,
- wxDefaultSize,
- wxTE_PROCESS_ENTER);
- textctrl->SetToolTip( wxU(p_item->psz_longtext) );
- sizer->Add( textctrl, 1, wxALL, 5 );
- sizer->Layout();
- this->SetSizerAndFit( sizer );
-}
-
-StringConfigControl::~StringConfigControl()
-{
- ;
-}
-
-wxString StringConfigControl::GetPszValue()
-{
- return textctrl->GetValue();
-}
-
-BEGIN_EVENT_TABLE(StringConfigControl, wxPanel)
- /* Text events */
- EVT_TEXT(-1, StringConfigControl::OnUpdate)
-END_EVENT_TABLE()
-
-/*****************************************************************************
- * StringListConfigControl implementation
- *****************************************************************************/
-StringListConfigControl::StringListConfigControl( vlc_object_t *p_this,
- module_config_t *p_item,
- wxWindow *parent )
- : ConfigControl( p_this, p_item, parent )
-{
- psz_default_value = (char *)p_item->value.psz;
- if( psz_default_value ) psz_default_value = strdup( psz_default_value );
-
- label = new wxStaticText(this, -1, wxU(p_item->psz_text));
- sizer->Add( label, 1, wxALIGN_CENTER_VERTICAL | wxALL, 5 );
- combo = new wxComboBox( this, -1, wxT(""),
- wxDefaultPosition, wxDefaultSize,
- 0, NULL, wxCB_READONLY );
-
- // was required to do so - because local p_item is a memcpy of
- // this one, so it won't see the change done by pf_updat_list
- module_config_t *p_module_config = config_FindConfig( p_this, p_item->psz_name );
- if(p_module_config && p_module_config->pf_update_list)
- {
- vlc_value_t val;
- val.psz_string = strdup(p_module_config->value.psz);
-
- p_module_config->pf_update_list(p_this, p_item->psz_name, val, val, NULL);
-
- // assume in a×y case that dirty was set to true
- // because lazy programmes will use the same callback for
- // this, like the one behind the refresh push button?
- p_module_config->b_dirty = false;
-
- free( val.psz_string );
- }
-
- UpdateCombo( p_module_config );
-
- combo->SetToolTip( wxU(p_item->psz_longtext) );
- sizer->Add( combo, 1, wxALIGN_CENTER_VERTICAL | wxALL, 5 );
-
- for( int i = 0; i < p_item->i_action; i++ )
- {
- wxButton *button =
- new wxButton( this, wxID_HIGHEST+i,
- wxU(_(p_item->ppsz_action_text[i])) );
- sizer->Add( button, 0, wxALIGN_CENTER_VERTICAL | wxALL, 5);
- }
-
- sizer->Layout();
- this->SetSizerAndFit( sizer );
-}
-
-StringListConfigControl::~StringListConfigControl()
-{
- free( psz_default_value );
-}
-
-void StringListConfigControl::UpdateCombo( module_config_t *p_item )
-{
- bool b_found = false;
- int i_index;
-
- /* build a list of available options */
- for( i_index = 0; i_index < p_item->i_list; i_index++ )
- {
- combo->Append( ( p_item->ppsz_list_text &&
- p_item->ppsz_list_text[i_index] ) ?
- wxU(p_item->ppsz_list_text[i_index]) :
- wxL2U(p_item->ppsz_list[i_index]) );
- combo->SetClientData( i_index, (void *)p_item->ppsz_list[i_index] );
- if( ( p_item->value.psz &&
- !strcmp( p_item->value.psz, p_item->ppsz_list[i_index] ) ) ||
- ( !p_item->value.psz && !*p_item->ppsz_list[i_index] ) )
- {
- combo->SetSelection( i_index );
- combo->SetValue( ( p_item->ppsz_list_text &&
- p_item->ppsz_list_text[i_index] ) ?
- wxU(p_item->ppsz_list_text[i_index]) :
- wxL2U(p_item->ppsz_list[i_index]) );
- b_found = true;
- }
- }
-
- if( p_item->value.psz && !b_found )
- {
- /* Add custom entry to list */
- combo->Append( wxL2U(p_item->value.psz) );
- combo->SetClientData( i_index, (void *)psz_default_value );
- combo->SetSelection( i_index );
- combo->SetValue( wxL2U(p_item->value.psz) );
- }
-}
-
-BEGIN_EVENT_TABLE(StringListConfigControl, wxPanel)
- /* Button events */
- EVT_BUTTON(-1, StringListConfigControl::OnAction)
-
- /* Text events */
- EVT_TEXT(-1, StringListConfigControl::OnUpdate)
-END_EVENT_TABLE()
-
-void StringListConfigControl::OnAction( wxCommandEvent& event )
-{
- int i_action = event.GetId() - wxID_HIGHEST;
-
- module_config_t *p_item = config_FindConfig( p_this, GetName().mb_str(wxConvUTF8) );
- if( !p_item ) return;
-
- if( i_action < 0 || i_action >= p_item->i_action ) return;
-
- vlc_value_t val;
- wxString value = GetPszValue();
- *((const char **)&val.psz_string) = value.mb_str(wxConvUTF8);
- p_item->ppf_action[i_action]( p_this, GetName().mb_str(wxConvUTF8), val, val, 0 );
-
- if( p_item->b_dirty )
- {
- combo->Clear();
- UpdateCombo( p_item );
- p_item->b_dirty = false;
- }
-}
-
-wxString StringListConfigControl::GetPszValue()
-{
- int selected = combo->GetSelection();
- if( selected != -1 )
- {
- return wxL2U((char *)combo->GetClientData( selected ));
- }
- return wxString();
-}
-
-/*****************************************************************************
- * FileConfigControl implementation
- *****************************************************************************/
-FileConfigControl::FileConfigControl( vlc_object_t *p_this,
- module_config_t *p_item,
- wxWindow *parent )
- : ConfigControl( p_this, p_item, parent )
-{
- directory = p_item->i_type == CONFIG_ITEM_DIRECTORY;
- label = new wxStaticText(this, -1, wxU(p_item->psz_text));
- sizer->Add( label, 1, wxALIGN_CENTER_VERTICAL | wxALL, 5 );
- textctrl = new wxTextCtrl( this, -1,
- wxL2U(p_item->value.psz),
- wxDefaultPosition,
- wxDefaultSize,
- wxTE_PROCESS_ENTER);
- textctrl->SetToolTip( wxU(p_item->psz_longtext) );
- sizer->Add( textctrl, 1, wxALL, 5 );
- browse = new wxButton( this, wxID_HIGHEST, wxU(_("Browse...")) );
- sizer->Add( browse, 0, wxALIGN_CENTER_VERTICAL | wxALL, 5);
- sizer->Layout();
- this->SetSizerAndFit( sizer );
-}
-
-BEGIN_EVENT_TABLE(FileConfigControl, wxPanel)
- /* Button events */
- EVT_BUTTON(wxID_HIGHEST, FileConfigControl::OnBrowse)
-END_EVENT_TABLE()
-
-void FileConfigControl::OnBrowse( wxCommandEvent& event )
-{
- if( directory )
- {
- wxDirDialog dialog( this, wxU(_("Choose directory")) );
-
- if( dialog.ShowModal() == wxID_OK )
- {
- textctrl->SetValue( dialog.GetPath() );
- }
- }
- else
- {
- wxFileDialog dialog( this, wxU(_("Choose file")),
- wxT(""), wxT(""), wxT("*.*"),
-#if defined( __WXMSW__ )
- wxOPEN
-#else
- wxOPEN
-#endif
- );
- if( dialog.ShowModal() == wxID_OK )
- {
- textctrl->SetValue( dialog.GetPath() );
- }
- }
-}
-
-FileConfigControl::~FileConfigControl()
-{
- ;
-}
-
-wxString FileConfigControl::GetPszValue()
-{
- return textctrl->GetValue();
-}
-
-/*****************************************************************************
- * IntegerConfigControl implementation
- *****************************************************************************/
-BEGIN_EVENT_TABLE(IntegerConfigControl, wxPanel)
- EVT_TEXT(-1, IntegerConfigControl::OnUpdate)
- EVT_COMMAND_SCROLL(-1, IntegerConfigControl::OnUpdateScroll)
-END_EVENT_TABLE()
-
-IntegerConfigControl::IntegerConfigControl( vlc_object_t *p_this,
- module_config_t *p_item,
- wxWindow *parent )
- : ConfigControl( p_this, p_item, parent )
-{
- label = new wxStaticText(this, -1, wxU(p_item->psz_text));
- spin = new wxSpinCtrl( this, -1,
- wxString::Format(wxT("%d"),
- p_item->value.i),
- wxDefaultPosition, wxDefaultSize,
- wxSP_ARROW_KEYS,
- -100000000, 100000000, p_item->value.i);
- spin->SetToolTip( wxU(p_item->psz_longtext) );
- sizer->Add( label, 1, wxALIGN_CENTER_VERTICAL | wxALL, 5 );
- sizer->Add( spin, 0, wxALIGN_CENTER_VERTICAL | wxALL, 5 );
- sizer->Layout();
- this->SetSizerAndFit( sizer );
- i_value = p_item->value.i;
-}
-
-IntegerConfigControl::~IntegerConfigControl()
-{
- ;
-}
-
-int IntegerConfigControl::GetIntValue()
-{
- /* We avoid using GetValue because of a recursion bug with wxSpinCtrl with
- * wxGTK. */
- return spin->GetValue();
-}
-
-void IntegerConfigControl::OnUpdate( wxCommandEvent &event )
-{
- ConfigControl::OnUpdate( event );
-}
-void IntegerConfigControl::OnUpdateScroll( wxScrollEvent &event )
-{
- wxCommandEvent cevent;
- cevent.SetInt(event.GetPosition());
- OnUpdate(cevent);
-}
-
-/*****************************************************************************
- * IntegerListConfigControl implementation
- *****************************************************************************/
-IntegerListConfigControl::IntegerListConfigControl( vlc_object_t *p_this,
- module_config_t *p_item,
- wxWindow *parent )
- : ConfigControl( p_this, p_item, parent )
-{
- label = new wxStaticText(this, -1, wxU(p_item->psz_text));
- sizer->Add( label, 1, wxALIGN_CENTER_VERTICAL | wxALL, 5 );
- combo = new wxComboBox( this, -1, wxT(""),
- wxDefaultPosition, wxDefaultSize,
- 0, NULL, wxCB_READONLY );
-
- module_config_t *p_module_config = config_FindConfig( p_this, p_item->psz_name );
- if(p_module_config && p_module_config->pf_update_list)
- {
- vlc_value_t val;
- val.i_int = p_module_config->value.i;
-
- p_module_config->pf_update_list(p_this, p_item->psz_name, val, val, NULL);
-
- // assume in any case that dirty was set to true
- // because lazy programmes will use the same callback for
- // this, like the one behind the refresh push button?
- p_module_config->b_dirty = false;
- }
-
- UpdateCombo( p_module_config );
-
- combo->SetToolTip( wxU(p_item->psz_longtext) );
- sizer->Add( combo, 1, wxALIGN_CENTER_VERTICAL | wxALL, 5 );
-
- sizer->Layout();
- this->SetSizerAndFit( sizer );
-}
-
-IntegerListConfigControl::~IntegerListConfigControl()
-{
-}
-
-void IntegerListConfigControl::UpdateCombo( module_config_t *p_item )
-{
- /* build a list of available options */
- for( int i_index = 0; i_index < p_item->i_list; i_index++ )
- {
- if( p_item->ppsz_list_text && p_item->ppsz_list_text[i_index] )
- {
- combo->Append( wxU(p_item->ppsz_list_text[i_index]) );
- }
- else
- {
- combo->Append( wxString::Format(wxT("%i"),
- p_item->pi_list[i_index]) );
- }
- combo->SetClientData( i_index, (void *)p_item->pi_list[i_index] );
- if( p_item->value.i == p_item->pi_list[i_index] )
- {
- combo->SetSelection( i_index );
- if( p_item->ppsz_list_text && p_item->ppsz_list_text[i_index] )
- {
- combo->SetValue( wxU(p_item->ppsz_list_text[i_index]) );
- }
- else
- {
- combo->SetValue( wxString::Format(wxT("%i"),
- p_item->pi_list[i_index]) );
- }
- }
- }
-}
-
-BEGIN_EVENT_TABLE(IntegerListConfigControl, wxPanel)
- /* Button events */
- EVT_BUTTON(-1, IntegerListConfigControl::OnAction)
-
- /* Update events */
- EVT_TEXT(-1, IntegerListConfigControl::OnUpdate)
-END_EVENT_TABLE()
-
-void IntegerListConfigControl::OnAction( wxCommandEvent& event )
-{
- int i_action = event.GetId() - wxID_HIGHEST;
-
- module_config_t *p_item;
- p_item = config_FindConfig( p_this, GetName().mb_str(wxConvUTF8) );
- if( !p_item ) return;
-
- if( i_action < 0 || i_action >= p_item->i_action ) return;
-
- vlc_value_t val;
- val.i_int = GetIntValue();
- p_item->ppf_action[i_action]( p_this, GetName().mb_str(wxConvUTF8), val, val, 0 );
-
- if( p_item->b_dirty )
- {
- combo->Clear();
- UpdateCombo( p_item );
- p_item->b_dirty = false;
- }
-}
-
-int IntegerListConfigControl::GetIntValue()
-{
- int selected = combo->GetSelection();
- if( selected != -1 )
- {
- return (int)combo->GetClientData( selected );
- }
- return -1;
-}
-
-/*****************************************************************************
- * RangedIntConfigControl implementation
- *****************************************************************************/
-BEGIN_EVENT_TABLE(RangedIntConfigControl, wxPanel)
- EVT_COMMAND_SCROLL(-1, RangedIntConfigControl::OnUpdateScroll)
-END_EVENT_TABLE()
-
-RangedIntConfigControl::RangedIntConfigControl( vlc_object_t *p_this,
- module_config_t *p_item,
- wxWindow *parent )
- : ConfigControl( p_this, p_item, parent )
-{
- label = new wxStaticText(this, -1, wxU(p_item->psz_text));
- slider = new wxSlider( this, -1, p_item->value.i, p_item->min.i,
- p_item->max.i, wxDefaultPosition, wxDefaultSize,
- wxSL_LABELS | wxSL_HORIZONTAL );
- slider->SetToolTip( wxU(p_item->psz_longtext) );
- sizer->Add( label, 1, wxALIGN_CENTER_VERTICAL | wxALL, 5 );
- sizer->Add( slider, 1, wxALIGN_CENTER_VERTICAL | wxALL, 5 );
- sizer->Layout();
- this->SetSizerAndFit( sizer );
-}
-
-RangedIntConfigControl::~RangedIntConfigControl()
-{
- ;
-}
-
-int RangedIntConfigControl::GetIntValue()
-{
- return slider->GetValue();
-}
-
-
-/*****************************************************************************
- * FloatConfigControl implementation
- *****************************************************************************/
-BEGIN_EVENT_TABLE(FloatConfigControl, wxPanel)
- EVT_TEXT(-1, FloatConfigControl::OnUpdate)
-END_EVENT_TABLE()
-
-FloatConfigControl::FloatConfigControl( vlc_object_t *p_this,
- module_config_t *p_item,
- wxWindow *parent )
- : ConfigControl( p_this, p_item, parent )
-{
- label = new wxStaticText(this, -1, wxU(p_item->psz_text));
- textctrl = new wxTextCtrl( this, -1,
- wxString::Format(wxT("%f"),
- p_item->value.f),
- wxDefaultPosition, wxDefaultSize,
- wxTE_PROCESS_ENTER );
- textctrl->SetToolTip( wxU(p_item->psz_longtext) );
- sizer->Add( label, 1, wxALIGN_CENTER_VERTICAL | wxALL, 5 );
- sizer->Add( textctrl, 0, wxALIGN_CENTER_VERTICAL | wxALL, 5);
- sizer->Layout();
- this->SetSizerAndFit( sizer );
-}
-
-FloatConfigControl::~FloatConfigControl()
-{
- ;
-}
-
-float FloatConfigControl::GetFloatValue()
-{
- float f_value;
- if( (wxSscanf(textctrl->GetValue(), wxT("%f"), &f_value) == 1) )
- return f_value;
- else return 0.0;
-}
-
-/*****************************************************************************
- * BoolConfigControl implementation
- *****************************************************************************/
-BEGIN_EVENT_TABLE(BoolConfigControl, wxPanel)
- EVT_CHECKBOX(-1, BoolConfigControl::OnUpdate)
-END_EVENT_TABLE()
-
-BoolConfigControl::BoolConfigControl( vlc_object_t *p_this,
- module_config_t *p_item,
- wxWindow *parent )
- : ConfigControl( p_this, p_item, parent )
-{
- checkbox = new wxCheckBox( this, -1, wxU(p_item->psz_text) );
- if( p_item->value.i ) checkbox->SetValue(TRUE);
- checkbox->SetToolTip( wxU(p_item->psz_longtext) );
- sizer->Add( checkbox, 0, wxALL, 5 );
- sizer->Layout();
- this->SetSizerAndFit( sizer );
-}
-
-BoolConfigControl::~BoolConfigControl()
-{
- ;
-}
-
-int BoolConfigControl::GetIntValue()
-{
- if( checkbox->IsChecked() ) return 1;
- else return 0;
-}
-
-/*****************************************************************************
- * SectionConfigControl implementation
- *****************************************************************************/
-SectionConfigControl::SectionConfigControl( vlc_object_t *p_this,
- module_config_t *p_item,
- wxWindow *parent )
- : ConfigControl( p_this, p_item, parent )
-{
- delete sizer;
- sizer = new wxBoxSizer( wxVERTICAL );
- sizer->Add( new wxStaticText( this, -1, wxU( p_item->psz_text ) ) );
- sizer->Add( new wxStaticLine( this, -1 ), 0, wxEXPAND, 5 );
- sizer->Layout();
- this->SetSizerAndFit( sizer );
-}
-
-SectionConfigControl::~SectionConfigControl()
-{
- ;
-}
+++ /dev/null
-/*****************************************************************************
- * preferences_widgets.h : wxWindows plugin for vlc
- *****************************************************************************
- * Copyright (C) 2000-2003 the VideoLAN team
- * $Id$
- *
- * Authors: Sigmund Augdal Helberg <dnumgis@videolan.org>
- *
- * 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., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
- *****************************************************************************/
-
-#include <vector>
-#include <wx/spinctrl.h>
-
-class ConfigControl: public wxPanel
-{
-public:
- ConfigControl( vlc_object_t *, module_config_t *, wxWindow * );
- virtual ~ConfigControl();
- wxSizer *Sizer();
-
- virtual int GetIntValue() {return 0;}
- virtual float GetFloatValue() {return 0;}
- virtual wxString GetPszValue() {return wxString();}
-
- wxString GetName();
- int GetType();
- bool IsAdvanced();
-
- void SetUpdateCallback( void (*)( void * ), void * );
-
-protected:
- wxBoxSizer *sizer;
- wxStaticText *label;
- vlc_object_t *p_this;
-
- void (*pf_update_callback)( void * );
- void *p_update_data;
-
- void OnUpdate( wxCommandEvent& event );
- void OnUpdateScroll( wxScrollEvent& event );
-
-private:
- wxString name;
- int i_type;
- bool b_advanced;
-};
-
-ConfigControl *CreateConfigControl( vlc_object_t *,
- module_config_t *, wxWindow * );
-
-class KeyConfigControl: public ConfigControl
-{
-public:
- KeyConfigControl( vlc_object_t *, module_config_t *, wxWindow * );
- ~KeyConfigControl();
- virtual int GetIntValue();
-private:
- wxCheckBox *alt;
- wxCheckBox *ctrl;
- wxCheckBox *shift;
- wxComboBox *combo;
- // Array of key descriptions, for the ComboBox
- static wxString *m_keysList;
-};
-
-class ModuleConfigControl: public ConfigControl
-{
-public:
- ModuleConfigControl( vlc_object_t *, module_config_t *, wxWindow * );
- ~ModuleConfigControl();
- virtual wxString GetPszValue();
-private:
- wxComboBox *combo;
-};
-
-struct moduleCheckBox {
- wxCheckBox *checkbox;
- char *psz_module;
-};
-
-class ModuleCatConfigControl: public ConfigControl
-{
-public:
- ModuleCatConfigControl( vlc_object_t *, module_config_t *, wxWindow * );
- ~ModuleCatConfigControl();
- virtual wxString GetPszValue();
-private:
- wxComboBox *combo;
-};
-
-
-class ModuleListCatConfigControl: public ConfigControl
-{
-public:
- ModuleListCatConfigControl( vlc_object_t *, module_config_t *, wxWindow * );
- ~ModuleListCatConfigControl();
- virtual wxString GetPszValue();
-private:
- std::vector<moduleCheckBox *> pp_checkboxes;
-
- void OnUpdate( wxCommandEvent& );
-
- wxTextCtrl *text;
- DECLARE_EVENT_TABLE()
-};
-
-;
-
-class StringConfigControl: public ConfigControl
-{
-public:
- StringConfigControl( vlc_object_t *, module_config_t *, wxWindow * );
- ~StringConfigControl();
- virtual wxString GetPszValue();
-private:
- wxTextCtrl *textctrl;
-
- DECLARE_EVENT_TABLE()
-};
-
-class StringListConfigControl: public ConfigControl
-{
-public:
- StringListConfigControl( vlc_object_t *, module_config_t *, wxWindow * );
- ~StringListConfigControl();
- virtual wxString GetPszValue();
-private:
- wxComboBox *combo;
- char *psz_default_value;
- void UpdateCombo( module_config_t *p_item );
-
- void OnAction( wxCommandEvent& );
-
- DECLARE_EVENT_TABLE()
-};
-
-class FileConfigControl: public ConfigControl
-{
-public:
- FileConfigControl( vlc_object_t *, module_config_t *, wxWindow * );
- ~FileConfigControl();
- void OnBrowse( wxCommandEvent& );
- virtual wxString GetPszValue();
-private:
- wxTextCtrl *textctrl;
- wxButton *browse;
- bool directory;
-
- DECLARE_EVENT_TABLE()
-};
-
-class IntegerConfigControl: public ConfigControl
-{
-public:
- IntegerConfigControl( vlc_object_t *, module_config_t *, wxWindow * );
- ~IntegerConfigControl();
- virtual int GetIntValue();
-private:
- wxSpinCtrl *spin;
- int i_value;
-
- void OnUpdate( wxCommandEvent& event );
- void OnUpdateScroll( wxScrollEvent& event );
-
- DECLARE_EVENT_TABLE()
-};
-
-class IntegerListConfigControl: public ConfigControl
-{
-public:
- IntegerListConfigControl( vlc_object_t *, module_config_t *, wxWindow * );
- ~IntegerListConfigControl();
- virtual int GetIntValue();
-private:
- wxComboBox *combo;
- void UpdateCombo( module_config_t *p_item );
-
- void OnAction( wxCommandEvent& );
-
- DECLARE_EVENT_TABLE()
-};
-
-class RangedIntConfigControl: public ConfigControl
-{
-public:
- RangedIntConfigControl( vlc_object_t *, module_config_t *, wxWindow * );
- ~RangedIntConfigControl();
- virtual int GetIntValue();
-private:
- wxSlider *slider;
-
- DECLARE_EVENT_TABLE()
-};
-
-class FloatConfigControl: public ConfigControl
-{
-public:
- FloatConfigControl( vlc_object_t *, module_config_t *, wxWindow * );
- ~FloatConfigControl();
- virtual float GetFloatValue();
-private:
- wxTextCtrl *textctrl;
-
- DECLARE_EVENT_TABLE()
-};
-
-class BoolConfigControl: public ConfigControl
-{
-public:
- BoolConfigControl( vlc_object_t *, module_config_t *, wxWindow * );
- ~BoolConfigControl();
- virtual int GetIntValue();
-private:
- wxCheckBox *checkbox;
-
- DECLARE_EVENT_TABLE()
-};
-
-class SectionConfigControl: public ConfigControl
-{
-public:
- SectionConfigControl( vlc_object_t *, module_config_t *, wxWindow * );
- ~SectionConfigControl();
-};
+++ /dev/null
-/*****************************************************************************
- * streamout.cpp : wxWindows plugin for vlc
- *****************************************************************************
- * Copyright (C) 2000-2004 the VideoLAN team
- * $Id$
- *
- * 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., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
- *****************************************************************************/
-
-/*****************************************************************************
- * Preamble
- *****************************************************************************/
-#include "dialogs/streamout.hpp"
-
-#include <wx/spinctrl.h>
-#include <wx/combobox.h>
-#include <wx/statline.h>
-
-#include "streamdata.h"
-
-#ifndef wxRB_SINGLE
-# define wxRB_SINGLE 0
-#endif
-
-/*****************************************************************************
- * Event Table.
- *****************************************************************************/
-
-/* IDs for the controls and the menu commands */
-enum
-{
- Notebook_Event = wxID_HIGHEST,
- MRL_Event,
-
- FileBrowse_Event,
- FileName_Event,
- FileDump_Event,
-
- AccessType1_Event, AccessType2_Event, AccessType3_Event,
- AccessType4_Event, AccessType5_Event, AccessType6_Event,
- NetPort1_Event, NetPort2_Event, NetPort3_Event, NetPort4_Event,
- NetAddr1_Event, NetAddr2_Event, NetAddr3_Event, NetAddr4_Event,
-
- EncapsulationRadio1_Event, EncapsulationRadio2_Event,
- EncapsulationRadio3_Event, EncapsulationRadio4_Event,
- EncapsulationRadio5_Event, EncapsulationRadio6_Event,
- EncapsulationRadio7_Event, EncapsulationRadio8_Event,
- EncapsulationRadio9_Event, EncapsulationRadio10_Event,
-
- VideoTranscEnable_Event, VideoTranscCodec_Event, VideoTranscBitrate_Event,
- VideoTranscScale_Event,
- AudioTranscEnable_Event, AudioTranscCodec_Event, AudioTranscBitrate_Event,
- AudioTranscChans_Event,
- SubtitlesTranscEnable_Event, SubtitlesTranscCodec_Event,
- SubtitlesOverlayEnable_Event,
-
- SAPMisc_Event, AnnounceGroup_Event, AnnounceAddr_Event,
- SoutAll_Event
-};
-
-BEGIN_EVENT_TABLE(SoutDialog, wxDialog)
- /* Button events */
- EVT_BUTTON(wxID_OK, SoutDialog::OnOk)
- EVT_BUTTON(wxID_CANCEL, SoutDialog::OnCancel)
-
- /* Events generated by the access output panel */
- EVT_CHECKBOX(AccessType1_Event, SoutDialog::OnAccessTypeChange)
- EVT_CHECKBOX(AccessType2_Event, SoutDialog::OnAccessTypeChange)
- EVT_CHECKBOX(AccessType3_Event, SoutDialog::OnAccessTypeChange)
- EVT_CHECKBOX(AccessType4_Event, SoutDialog::OnAccessTypeChange)
- EVT_CHECKBOX(AccessType5_Event, SoutDialog::OnAccessTypeChange)
- EVT_CHECKBOX(AccessType6_Event, SoutDialog::OnAccessTypeChange)
- EVT_TEXT(FileName_Event, SoutDialog::OnFileChange)
- EVT_BUTTON(FileBrowse_Event, SoutDialog::OnFileBrowse)
- EVT_CHECKBOX(FileDump_Event, SoutDialog::OnFileDump)
-
- EVT_TEXT(NetPort1_Event, SoutDialog::OnNetChange)
- EVT_TEXT(NetAddr1_Event, SoutDialog::OnNetChange)
- EVT_TEXT(NetPort2_Event, SoutDialog::OnNetChange)
- EVT_TEXT(NetAddr2_Event, SoutDialog::OnNetChange)
- EVT_TEXT(NetPort3_Event, SoutDialog::OnNetChange)
- EVT_TEXT(NetAddr3_Event, SoutDialog::OnNetChange)
- EVT_TEXT(NetPort4_Event, SoutDialog::OnNetChange)
- EVT_TEXT(NetAddr4_Event, SoutDialog::OnNetChange)
-
- /* Events generated by the encapsulation panel */
- EVT_RADIOBUTTON(EncapsulationRadio1_Event,
- SoutDialog::OnEncapsulationChange)
- EVT_RADIOBUTTON(EncapsulationRadio2_Event,
- SoutDialog::OnEncapsulationChange)
- EVT_RADIOBUTTON(EncapsulationRadio3_Event,
- SoutDialog::OnEncapsulationChange)
- EVT_RADIOBUTTON(EncapsulationRadio4_Event,
- SoutDialog::OnEncapsulationChange)
- EVT_RADIOBUTTON(EncapsulationRadio5_Event,
- SoutDialog::OnEncapsulationChange)
- EVT_RADIOBUTTON(EncapsulationRadio6_Event,
- SoutDialog::OnEncapsulationChange)
- EVT_RADIOBUTTON(EncapsulationRadio7_Event,
- SoutDialog::OnEncapsulationChange)
- EVT_RADIOBUTTON(EncapsulationRadio8_Event,
- SoutDialog::OnEncapsulationChange)
- EVT_RADIOBUTTON(EncapsulationRadio9_Event,
- SoutDialog::OnEncapsulationChange)
-
- /* Events generated by the transcoding panel */
- EVT_CHECKBOX(VideoTranscEnable_Event, SoutDialog::OnTranscodingEnable)
- EVT_CHECKBOX(AudioTranscEnable_Event, SoutDialog::OnTranscodingEnable)
- EVT_CHECKBOX(SubtitlesTranscEnable_Event, SoutDialog::OnTranscodingEnable)
- EVT_CHECKBOX(SubtitlesOverlayEnable_Event, SoutDialog::OnTranscodingEnable)
- EVT_COMBOBOX(VideoTranscCodec_Event, SoutDialog::OnTranscodingChange)
- EVT_TEXT(VideoTranscCodec_Event, SoutDialog::OnTranscodingChange)
- EVT_COMBOBOX(AudioTranscCodec_Event, SoutDialog::OnTranscodingChange)
- EVT_TEXT(AudioTranscCodec_Event, SoutDialog::OnTranscodingChange)
- EVT_COMBOBOX(VideoTranscBitrate_Event, SoutDialog::OnTranscodingChange)
- EVT_TEXT(VideoTranscBitrate_Event, SoutDialog::OnTranscodingChange)
- EVT_COMBOBOX(AudioTranscBitrate_Event, SoutDialog::OnTranscodingChange)
- EVT_TEXT(AudioTranscBitrate_Event, SoutDialog::OnTranscodingChange)
- EVT_COMBOBOX(VideoTranscScale_Event, SoutDialog::OnTranscodingChange)
- EVT_TEXT(VideoTranscScale_Event, SoutDialog::OnTranscodingChange)
- EVT_COMBOBOX(AudioTranscChans_Event, SoutDialog::OnTranscodingChange)
- EVT_TEXT(AudioTranscChans_Event, SoutDialog::OnTranscodingChange)
- EVT_COMBOBOX(SubtitlesTranscCodec_Event, SoutDialog::OnTranscodingChange)
- EVT_TEXT(SubtitlesTranscCodec_Event, SoutDialog::OnTranscodingChange)
-
- /* Events generated by the misc panel */
- EVT_CHECKBOX(SAPMisc_Event, SoutDialog::OnSAPMiscChange)
- EVT_TEXT(AnnounceGroup_Event, SoutDialog::OnAnnounceGroupChange)
- EVT_TEXT(AnnounceAddr_Event, SoutDialog::OnAnnounceAddrChange)
- EVT_CHECKBOX(SoutAll_Event, SoutDialog::OnAnnounceGroupChange)
-
-END_EVENT_TABLE()
-
-/*****************************************************************************
- * Constructor.
- *****************************************************************************/
-SoutDialog::SoutDialog( intf_thread_t *_p_intf, wxWindow* _p_parent ):
- wxDialog( _p_parent, -1, wxU(_("Stream output")),
- wxDefaultPosition, wxDefaultSize, wxDEFAULT_FRAME_STYLE )
-{
- /* Initializations */
- p_intf = _p_intf;
- p_parent = _p_parent;
- SetIcon( *p_intf->p_sys->p_icon );
-
- /* Create a panel to put everything in */
- wxPanel *panel = new wxPanel( this, -1 );
- panel->SetAutoLayout( TRUE );
-
- /* Create MRL combobox */
- wxBoxSizer *mrl_sizer_sizer = new wxBoxSizer( wxHORIZONTAL );
- wxStaticBox *mrl_box = new wxStaticBox( panel, -1,
- wxU(_("Stream output MRL")) );
- wxStaticBoxSizer *mrl_sizer = new wxStaticBoxSizer( mrl_box,
- wxHORIZONTAL );
- wxStaticText *mrl_label = new wxStaticText( panel, -1,
- wxU(_("Target:")));
- mrl_combo = new wxComboBox( panel, MRL_Event, wxT(""),
- wxPoint(20,25), wxSize(120, -1) );
- mrl_combo->SetToolTip( wxU(_("Specifies the MRL. This can be specified "
- "directly or filled in automatically by adjusting the "
- "stream settings.")) );
-
- mrl_sizer->Add( mrl_label, 0, wxALL | wxALIGN_CENTER, 5 );
- mrl_sizer->Add( mrl_combo, 1, wxALL | wxALIGN_CENTER, 5 );
- mrl_sizer_sizer->Add( mrl_sizer, 1, wxEXPAND | wxALL, 5 );
-
- /* Create the access output panel */
- access_panel = AccessPanel( panel );
-
- /* Create the output encapsulation panel */
- encapsulation_panel = EncapsulationPanel( panel );
-
- /* Create the transcoding panel */
- transcoding_panel = TranscodingPanel( panel );
-
- /* Create the Misc panel */
- misc_panel = MiscPanel( panel );
-
- /* Create the buttons */
- wxButton *ok_button = new wxButton( panel, wxID_OK, wxU(_("&OK")) );
- ok_button->SetDefault();
- wxButton *cancel_button = new wxButton( panel, wxID_CANCEL,
- wxU(_("&Cancel")) );
-
- /* Place everything in sizers */
- wxStdDialogButtonSizer *button_sizer = new wxStdDialogButtonSizer;
- button_sizer->AddButton( ok_button );
- button_sizer->AddButton( cancel_button );
- button_sizer->Realize();
- wxBoxSizer *main_sizer = new wxBoxSizer( wxVERTICAL );
- wxBoxSizer *panel_sizer = new wxBoxSizer( wxVERTICAL );
- panel_sizer->Add( mrl_sizer_sizer, 0, wxEXPAND, 5 );
- panel_sizer->Add( access_panel, 1, wxEXPAND | wxALL, 5 );
- panel_sizer->Add( encapsulation_panel, 0, wxEXPAND | wxALL, 5 );
- panel_sizer->Add( transcoding_panel, 0, wxEXPAND | wxALL, 5 );
- panel_sizer->Add( misc_panel, 0, wxEXPAND | wxALL, 5 );
- panel_sizer->Add( button_sizer, 0, wxEXPAND | wxALL, 5 );
- panel_sizer->Layout();
- panel->SetSizerAndFit( panel_sizer );
- main_sizer->Add( panel, 1, wxGROW, 0 );
- main_sizer->Layout();
- SetSizerAndFit( main_sizer );
-}
-
-SoutDialog::~SoutDialog()
-{
-}
-
-wxArrayString SoutDialog::GetOptions()
-{
- return SeparateEntries( mrl_combo->GetValue() );
-}
-
-/*****************************************************************************
- * Private methods.
- *****************************************************************************/
-void SoutDialog::UpdateMRL()
-{
- /* Check the demux dump option */
- if( dump_checkbox->IsChecked() )
- {
- wxString dumpfile;
-
- if( file_combo->GetValue().size() )
- dumpfile = wxT(" :demuxdump-file=\"") +
- file_combo->GetValue() + wxT("\"");
- mrl_combo->SetValue( wxT(":demux=dump") + dumpfile );
-
- return;
- }
-
- /* Let's start with the transcode options */
- wxString transcode;
- if( video_transc_checkbox->IsChecked() ||
- audio_transc_checkbox->IsChecked() ||
- subtitles_transc_checkbox->IsChecked() ||
- subtitles_overlay_checkbox->IsChecked() )
- {
- transcode = wxT("transcode{");
- if( video_transc_checkbox->IsChecked() )
- {
- transcode += wxT("vcodec=") + video_codec_combo->GetValue();
- transcode += wxT(",vb=") + video_bitrate_combo->GetValue();
- transcode += wxT(",scale=") + video_scale_combo->GetValue();
- if( audio_transc_checkbox->IsChecked() ||
- subtitles_transc_checkbox->IsChecked() ||
- subtitles_overlay_checkbox->IsChecked() )
- transcode += wxT(",");
- }
- if( audio_transc_checkbox->IsChecked() )
- {
- transcode += wxT("acodec=") + audio_codec_combo->GetValue();
- transcode += wxT(",ab=") + audio_bitrate_combo->GetValue();
- transcode += wxT(",channels=") + audio_channels_combo->GetValue();
- if( subtitles_transc_checkbox->IsChecked() ||
- subtitles_overlay_checkbox->IsChecked() )
- transcode += wxT(",");
- }
- if( subtitles_transc_checkbox->IsChecked() )
- {
- transcode += wxT("scodec=") + subtitles_codec_combo->GetValue();
- }
- if( subtitles_overlay_checkbox->IsChecked() )
- {
- transcode += wxT("soverlay");
- }
- transcode += wxT("}");
- }
-
- /* Encapsulation */
- wxString encapsulation;
- switch( i_encapsulation_type )
- {
- case PS_ENCAPSULATION:
- encapsulation = wxT("ps");
- break;
- case MPEG1_ENCAPSULATION:
- encapsulation = wxT("mpeg1");
- break;
- case AVI_ENCAPSULATION:
- encapsulation = wxT("avi");
- break;
- case OGG_ENCAPSULATION:
- encapsulation = wxT("ogg");
- break;
- case RAW_ENCAPSULATION:
- encapsulation = wxT("raw");
- break;
- case MP4_ENCAPSULATION:
- encapsulation = wxT("mp4");
- break;
- case MOV_ENCAPSULATION:
- encapsulation = wxT("mov");
- break;
- case ASF_ENCAPSULATION:
- encapsulation = wxT("asf");
- break;
- case WAV_ENCAPSULATION:
- encapsulation = wxT("wav");
- break;
- case TS_ENCAPSULATION:
- default:
- encapsulation = wxT("ts");
- break;
- }
-
- /* Now continue with the duplicate option */
- wxString dup_opts;
- if( access_checkboxes[PLAY_ACCESS_OUT]->IsChecked() )
- {
- dup_opts += wxT("dst=display");
- }
- if( access_checkboxes[FILE_ACCESS_OUT]->IsChecked() )
- {
- if( !dup_opts.IsEmpty() ) dup_opts += wxT(",");
- dup_opts += wxT("dst=std{access=file,mux=");
- dup_opts += encapsulation + wxT(",dst=\"");
- dup_opts += file_combo->GetValue() + wxT("\"}");
- }
- if( access_checkboxes[HTTP_ACCESS_OUT]->IsChecked() )
- {
- if( !dup_opts.IsEmpty() ) dup_opts += wxT(",");
- dup_opts += wxT("dst=std{access=http,mux=");
- dup_opts += encapsulation + wxT(",dst=");
- dup_opts += net_addrs[HTTP_ACCESS_OUT]->GetLineText(0);
- dup_opts += wxString::Format( wxT(":%d"),
- net_ports[HTTP_ACCESS_OUT]->GetValue() );
- dup_opts += wxT("}");
- }
- if( access_checkboxes[MMSH_ACCESS_OUT]->IsChecked() )
- {
- if( !dup_opts.IsEmpty() ) dup_opts += wxT(",");
- dup_opts += wxT("dst=std{access=mmsh,mux=");
- dup_opts += encapsulation;
- if( i_encapsulation_type == ASF_ENCAPSULATION ) dup_opts += wxT("h");
- dup_opts += wxT(",dst=");
- dup_opts += net_addrs[MMSH_ACCESS_OUT]->GetLineText(0);
- dup_opts += wxString::Format( wxT(":%d"),
- net_ports[MMSH_ACCESS_OUT]->GetValue() );
- dup_opts += wxT("}");
- }
- if( access_checkboxes[RTP_ACCESS_OUT]->IsChecked() )
- {
- if( !dup_opts.IsEmpty() ) dup_opts += wxT(",");
- dup_opts += wxT("dst=rtp{mux=");
- dup_opts += encapsulation + wxT(",dst=");
-
- wxString rtp_addr = net_addrs[RTP_ACCESS_OUT]->GetLineText(0);
- if ((rtp_addr[0u] != '[') && (rtp_addr.Find(':') != -1))
- {
- dup_opts += wxT ("[") + rtp_addr + wxT ("]");
- }
- else
- {
- dup_opts += rtp_addr;
- }
- dup_opts += wxString::Format( wxT(":%d"),
- net_ports[RTP_ACCESS_OUT]->GetValue() );
-
- /* SAP if RTP */
- if( sap_checkbox->IsChecked() )
- {
- dup_opts += wxT(",sap");
- if( ! announce_group->GetLineText(0).IsEmpty() )
- {
- dup_opts += wxT(",group=\"");
- dup_opts += announce_group->GetLineText(0);
- dup_opts += wxT("\"");
- }
- if( ! announce_addr->GetLineText(0).IsEmpty() )
- {
- dup_opts += wxT(",name=\"");
- dup_opts += announce_addr->GetLineText(0);
- dup_opts += wxT("\"");
- }
- }
-
- dup_opts += wxT("}");
- }
-
- if( access_checkboxes[UDP_ACCESS_OUT]->IsChecked() )
- {
- if( !dup_opts.IsEmpty() ) dup_opts += wxT(",");
- dup_opts += wxT("dst=std{access=udp,mux=");
- dup_opts += encapsulation + wxT(",dst=");
-
- wxString udp_addr = net_addrs[UDP_ACCESS_OUT]->GetLineText(0);
- if ((udp_addr[0u] != '[') && (udp_addr.Find(':') != -1))
- {
- dup_opts += wxT ("[") + udp_addr + wxT ("]");
- }
- else
- {
- dup_opts += udp_addr;
- }
- dup_opts += wxString::Format( wxT(":%d"),
- net_ports[UDP_ACCESS_OUT]->GetValue() );
-
- /* SAP if UDP */
- if( sap_checkbox->IsChecked() )
- {
- dup_opts += wxT(",sap");
- if( ! announce_group->GetLineText(0).IsEmpty() )
- {
- dup_opts += wxT(",group=\"");
- dup_opts += announce_group->GetLineText(0);
- dup_opts += wxT("\"");
- }
- if( ! announce_addr->GetLineText(0).IsEmpty() )
- {
- dup_opts += wxT(",name=\"");
- dup_opts += announce_addr->GetLineText(0);
- dup_opts += wxT("\"");
- }
- }
-
- dup_opts += wxT("}");
- }
-
- wxString duplicate;
- if( !dup_opts.IsEmpty() )
- {
- if( !transcode.IsEmpty() ) duplicate = wxT(":");
- duplicate += wxT("duplicate{") + dup_opts + wxT("}");
- }
-
- wxString misc;
- if( (!transcode.IsEmpty() || !duplicate.IsEmpty()) &&
- sout_all_checkbox->IsChecked() )
- {
- misc = wxT(" :sout-all");
- }
-
- if( !transcode.IsEmpty() || !duplicate.IsEmpty() )
- mrl_combo->SetValue( wxT(":sout=#") + transcode + duplicate + misc );
- else
- mrl_combo->SetValue( wxT("") );
-}
-
-wxPanel *SoutDialog::AccessPanel( wxWindow* parent )
-{
- int i;
- wxPanel *panel = new wxPanel( parent, -1, wxDefaultPosition,
- wxSize(200, 200) );
-
- wxStaticBox *panel_box = new wxStaticBox( panel, -1,
- wxU(_("Outputs")) );
- wxStaticBoxSizer *panel_sizer = new wxStaticBoxSizer( panel_box,
- wxVERTICAL );
-
- /*wxFlexGridSizer *sizer = new wxFlexGridSizer( 2, 4, 20 );*/
- wxFlexGridSizer *sizer = new wxFlexGridSizer( 2, 0, 20 );
- static const wxString access_output_array[] =
- {
- wxU(_("Play locally")),
- wxU(_("File")),
- wxU(_("HTTP")),
- wxU(_("MMSH")),
- wxU(_("RTP")),
- wxU(_("UDP")),
- };
-
- for( i=0; i < ACCESS_OUT_NUM; i++ )
- {
- access_checkboxes[i] = new wxCheckBox( panel, AccessType1_Event + i,
- access_output_array[i] );
- access_subpanels[i] = new wxPanel( panel, -1 );
- }
-
- /* Play locally row */
- wxFlexGridSizer *subpanel_sizer;
- wxStaticText *label;
- label = new wxStaticText( access_subpanels[0], -1, wxT("") );
- subpanel_sizer = new wxFlexGridSizer( 1, 1, 20 );
- subpanel_sizer->Add( label, 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL );
- access_subpanels[0]->SetSizerAndFit( subpanel_sizer );
- access_subpanels[0]->Hide();
-
- /* File row */
- /*subpanel_sizer = new wxFlexGridSizer( 3, 2, 20 );*/
- subpanel_sizer = new wxFlexGridSizer( 4, 1, 10);
- label = new wxStaticText( access_subpanels[1], -1, wxU(_("Filename")) );
- file_combo = new wxComboBox( access_subpanels[1], FileName_Event, wxT(""),
- wxPoint(20,25), wxSize(200, -1) );
- wxButton *browse_button = new wxButton( access_subpanels[1],
- FileBrowse_Event, wxU(_("Browse...")) );
- subpanel_sizer->Add( label, 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL );
- subpanel_sizer->Add( file_combo, 1,
- wxEXPAND | wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL );
- subpanel_sizer->Add( browse_button, 0,
- wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL );
- /*subpanel_sizer->Add( new wxPanel(access_subpanels[1], -1), 0,*/
- /* wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL );*/
- dump_checkbox = new wxCheckBox( access_subpanels[1], FileDump_Event,
- wxU(_("Dump raw input")) );
- subpanel_sizer->Add( dump_checkbox, 0,
- wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL | wxTOP, 5 );
-
- access_subpanels[1]->SetSizerAndFit( subpanel_sizer );
-
- /* Net rows */
- for( i = HTTP_ACCESS_OUT; i < ACCESS_OUT_NUM; i++ )
- {
- subpanel_sizer = new wxFlexGridSizer( 4, 1, 20 );
- label = new wxStaticText( access_subpanels[i], -1, wxU(_("Address")) );
- net_addrs[i] = new wxTextCtrl( access_subpanels[i],
- NetAddr1_Event + i - HTTP_ACCESS_OUT,
- wxT(""), wxDefaultPosition,
- wxSize( 200, -1 ), wxTE_PROCESS_ENTER);
- subpanel_sizer->Add( label, 0,
- wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL );
- subpanel_sizer->Add( net_addrs[i], 1, wxEXPAND |
- wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL );
-
- int val = config_GetInt( p_intf, "server-port" );
- label = new wxStaticText( access_subpanels[i], -1, wxU(_("Port")) );
- net_ports[i] = new wxSpinCtrl( access_subpanels[i],
- NetPort1_Event + i - HTTP_ACCESS_OUT,
- wxString::Format(wxT("%d"), val),
- wxDefaultPosition, wxDefaultSize,
- wxSP_ARROW_KEYS,
- 0, 65535, val );
-
- subpanel_sizer->Add( label, 0,
- wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL );
- subpanel_sizer->Add( net_ports[i], 0,
- wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL );
-
- access_subpanels[i]->SetSizerAndFit( subpanel_sizer );
- }
-
-
- /* Stuff everything into the main panel */
- for( i=1; i < ACCESS_OUT_NUM; i++ )
- {
- sizer->Add( access_checkboxes[i], 0,
- wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL | wxALL, 5 );
- sizer->Add( access_subpanels[i], 1, wxEXPAND | wxALIGN_CENTER_VERTICAL
- | wxALIGN_LEFT | wxALL, 5 );
- }
-
- panel_sizer->Add( access_checkboxes[0], 0,
- wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL | wxALL, 5 );
- panel_sizer->Add( sizer, 1, wxEXPAND | wxTOP, 3 );
-
- panel->SetSizerAndFit( panel_sizer );
-
- /* Update access type panel */
- for( i=1; i < ACCESS_OUT_NUM; i++ )
- {
- access_subpanels[i]->Disable();
- }
-
- return panel;
-}
-
-wxPanel *SoutDialog::MiscPanel( wxWindow* parent )
-{
- wxPanel *panel = new wxPanel( parent, -1, wxDefaultPosition,
- wxSize(200, 200) );
-
- wxStaticBox *panel_box = new wxStaticBox( panel, -1,
- wxU(_("Miscellaneous")) );
- wxStaticBoxSizer *panel_sizer = new wxStaticBoxSizer( panel_box,
- wxVERTICAL );
-
- /* Announce Row */
- misc_subpanels[ANN_MISC_SOUT] = new wxPanel( panel, -1 );
- misc_subpanels[TTL_MISC_SOUT] = new wxPanel( panel, -1 );
- wxFlexGridSizer *subpanel_sizer = new wxFlexGridSizer( 3, 4, 20 );
- wxFlexGridSizer *subpanel_sub_sizer = new wxFlexGridSizer( 5, 4, 20 );
- wxFlexGridSizer *subpanel2_sizer = new wxFlexGridSizer( 3, 4, 20 );
-
- sap_checkbox = new wxCheckBox( misc_subpanels[ANN_MISC_SOUT],SAPMisc_Event,
- wxU(_("SAP announce")) );
- wxStaticText *label_g = new wxStaticText( misc_subpanels[ANN_MISC_SOUT], -1,
- wxU(_("Group name")) );
- announce_group = new wxTextCtrl( misc_subpanels[ANN_MISC_SOUT],
- AnnounceGroup_Event,
- wxT(""), wxDefaultPosition,
- wxSize( 100, -1 ), wxTE_PROCESS_ENTER);
-
- wxStaticText *label = new wxStaticText( misc_subpanels[ANN_MISC_SOUT], -1,
- wxU(_("Channel name")) );
- announce_addr = new wxTextCtrl( misc_subpanels[ANN_MISC_SOUT],
- AnnounceAddr_Event,
- wxT(""), wxDefaultPosition,
- wxSize( 100, -1 ), wxTE_PROCESS_ENTER);
-
- sout_all_checkbox = new wxCheckBox( misc_subpanels[TTL_MISC_SOUT],
- SoutAll_Event, wxU(_("Select all elementary streams")) );
-
- wxStaticText *ttl_label = new wxStaticText( misc_subpanels[TTL_MISC_SOUT],
- -1,
- wxU(_("Time-To-Live (TTL)")) );
- ttl_spin = new wxSpinCtrl( misc_subpanels[TTL_MISC_SOUT], -1,
- wxEmptyString, wxDefaultPosition, wxDefaultSize,
- 0, 1, 255, config_GetInt( p_intf, "ttl" ) );
-
- subpanel_sizer->Add( sap_checkbox, 0,
- wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL );
- subpanel_sub_sizer->Add( label_g, 0, wxALIGN_RIGHT |
- wxALIGN_CENTER_VERTICAL );
- subpanel_sub_sizer->Add( announce_group, 1, wxEXPAND |
- wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL );
- subpanel_sub_sizer->Add( label, 0, wxALIGN_RIGHT |
- wxALIGN_CENTER_VERTICAL );
- subpanel_sub_sizer->Add( announce_addr, 1, wxEXPAND |
- wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL );
- subpanel_sizer->Add( subpanel_sub_sizer, 1, wxEXPAND |
- wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL );
-
- subpanel2_sizer->Add( sout_all_checkbox, 1,
- wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL | wxLEFT, 5 );
- subpanel2_sizer->Add( ttl_label, 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL );
- subpanel2_sizer->Add( ttl_spin, 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL );
-
- misc_subpanels[ANN_MISC_SOUT]->SetSizerAndFit( subpanel_sizer );
- misc_subpanels[TTL_MISC_SOUT]->SetSizerAndFit( subpanel2_sizer );
-
- /* Stuff everything into the main panel */
- panel_sizer->Add( misc_subpanels[ANN_MISC_SOUT], 1,
- wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL | wxLEFT, 5 );
-
- panel_sizer->Add( misc_subpanels[TTL_MISC_SOUT], 1,
- wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL | wxALL, 5 );
-
-
- panel->SetSizerAndFit( panel_sizer );
-
- /* Update misc panel */
- misc_subpanels[ANN_MISC_SOUT]->Disable();
- announce_group->Disable();
- announce_addr->Disable();
-
- return panel;
-}
-
-wxPanel *SoutDialog::EncapsulationPanel( wxWindow* parent )
-{
- unsigned int i;
- wxPanel *panel = new wxPanel( parent, -1, wxDefaultPosition,
- wxSize(200, 200) );
-
- wxStaticBox *panel_box = new wxStaticBox( panel, -1,
- wxU(_("Encapsulation Method")) );
- wxStaticBoxSizer *panel_sizer = new wxStaticBoxSizer( panel_box,
- wxHORIZONTAL );
-
- static const wxString encapsulation_array[] =
- {
- wxT("MPEG TS"),
- wxT("MPEG PS"),
- wxT("MPEG 1"),
- wxT("Ogg"),
- wxT("ASF"),
- wxT("MP4"),
- wxT("MOV"),
- wxT("WAV"),
- wxT("Raw")
- };
-
- /* Stuff everything into the main panel */
- for( i = 0; i < WXSIZEOF(encapsulation_array); i++ )
- {
- encapsulation_radios[i] =
- new wxRadioButton( panel, EncapsulationRadio1_Event + i,
- encapsulation_array[i] );
- panel_sizer->Add( encapsulation_radios[i], 0,
- wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL |
- wxALL, 4 );
- }
- /* Hide avi one */
- for( i = WXSIZEOF(encapsulation_array); i < ENCAPS_NUM; i++ )
- {
- encapsulation_radios[i] =
- new wxRadioButton( panel, EncapsulationRadio1_Event + i, wxT("") );
- encapsulation_radios[i]->Hide();
- }
-
- panel->SetSizerAndFit( panel_sizer );
-
- /* Update encapsulation panel */
- encapsulation_radios[TS_ENCAPSULATION]->SetValue(true);
- i_encapsulation_type = TS_ENCAPSULATION;
-
- return panel;
-}
-
-wxPanel *SoutDialog::TranscodingPanel( wxWindow* parent )
-{
- wxPanel *panel = new wxPanel( parent, -1, wxDefaultPosition,
- wxSize(200, 200) );
-
- wxStaticBox *panel_box = new wxStaticBox( panel, -1,
- wxU(_("Transcoding options")) );
- wxStaticBoxSizer *panel_sizer = new wxStaticBoxSizer( panel_box,
- wxVERTICAL );
-
- /* Create video transcoding checkox */
- static const wxString wxvcodecs_array[] =
- {
- wxT("mp1v"),
- wxT("mp2v"),
- wxT("mp4v"),
- wxT("DIV1"),
- wxT("DIV2"),
- wxT("DIV3"),
- wxT("H263"),
- wxT("h264"),
- wxT("WMV1"),
- wxT("WMV2"),
- wxT("MJPG"),
- wxT("theo")
- };
- /*
- static const wxString vbitrates_array[] =
- {
- wxT("3072"),
- wxT("2048"),
- wxT("1024"),
- wxT("768"),
- wxT("512"),
- wxT("384"),
- wxT("256"),
- wxT("192"),
- wxT("128"),
- wxT("96"),
- wxT("64"),
- wxT("32"),
- wxT("16")
- };
-*/
- static const wxString vscales_array[] =
- {
- wxT("0.25"),
- wxT("0.5"),
- wxT("0.75"),
- wxT("1"),
- wxT("1.25"),
- wxT("1.5"),
- wxT("1.75"),
- wxT("2")
- };
-
- wxFlexGridSizer *video_sizer = new wxFlexGridSizer( 6, 1, 20 );
-#if defined( __WXMSW__ )
- wxFlexGridSizer *video_sub_sizer = new wxFlexGridSizer( 4, 5, 20 );
-#else
- wxFlexGridSizer *video_sub_sizer = new wxFlexGridSizer( 2, 5, 20 );
-#endif
- video_transc_checkbox =
- new wxCheckBox( panel, VideoTranscEnable_Event, wxU(_("Video codec")));
- video_codec_combo =
- new wxComboBox( panel, VideoTranscCodec_Event, wxvcodecs_array[2],
- wxPoint(20,25), wxDefaultSize,
- WXSIZEOF(wxvcodecs_array),
- wxvcodecs_array, wxCB_READONLY );
- video_codec_combo->SetSelection(2);
- wxStaticText *bitrate_label =
- new wxStaticText( panel, -1, wxU(_("Bitrate (kb/s)")));
- video_bitrate_combo =
- new wxComboBox( panel, VideoTranscBitrate_Event, wxT("1024"),
- wxPoint(20,25), wxDefaultSize,
- WXSIZEOF(vbitrates_array), vbitrates_array );
- wxStaticText *scale_label =
- new wxStaticText( panel, -1, wxU(_("Scale")));
- video_scale_combo =
- new wxComboBox( panel, VideoTranscScale_Event, wxT("1"),
- wxPoint(20,25), wxDefaultSize,
- WXSIZEOF(vscales_array), vscales_array );
- video_sizer->Add( video_transc_checkbox, 0,
- wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL );
- video_sizer->Add( video_codec_combo, 1,
- wxEXPAND | wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL );
- video_sub_sizer->Add( bitrate_label, 0,
- wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL );
- video_sub_sizer->Add( video_bitrate_combo, 1,
- wxEXPAND | wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL );
- video_sub_sizer->Add( scale_label, 0,
- wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL );
- video_sub_sizer->Add( video_scale_combo, 1,
- wxEXPAND | wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL );
- video_sizer->Add( video_sub_sizer, 1, wxEXPAND |
- wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL );
-
- /* Create audio transcoding checkox */
- static const wxString wxacodecs_array[] =
- {
- wxT("mpga"),
- wxT("mp2a"),
- wxT("mp3"),
- wxT("mp4a"),
- wxT("a52"),
- wxT("vorb"),
- wxT("flac"),
- wxT("spx"),
- wxT("s16l"),
- wxT("fl32")
- };
- static const wxString achannels_array[] =
- {
- wxT("1"),
- wxT("2"),
- wxT("4"),
- wxT("6")
- };
-/*
- static const wxString abitrates_array[] =
- {
- wxT("512"),
- wxT("256"),
- wxT("192"),
- wxT("128"),
- wxT("96"),
- wxT("64"),
- wxT("32"),
- wxT("16")
- };
-*/
- wxFlexGridSizer *audio_sizer = new wxFlexGridSizer( 3, 1, 20 );
- audio_transc_checkbox =
- new wxCheckBox( panel, AudioTranscEnable_Event, wxU(_("Audio codec")));
- audio_codec_combo =
- new wxComboBox( panel, AudioTranscCodec_Event, wxacodecs_array[0],
- wxPoint(10,25), wxDefaultSize,
- WXSIZEOF(wxacodecs_array),
- wxacodecs_array, wxCB_READONLY );
- audio_codec_combo->SetSelection(0);
-#if defined( __WXMSW__ )
- wxFlexGridSizer *audio_sub_sizer = new wxFlexGridSizer( 4, 5, 20 );
-#else
- wxFlexGridSizer *audio_sub_sizer = new wxFlexGridSizer( 2, 5, 20 );
-#endif
- bitrate_label =
- new wxStaticText( panel, -1, wxU(_("Bitrate (kb/s)")));
- audio_bitrate_combo =
- new wxComboBox( panel, AudioTranscBitrate_Event, wxT("192"),
- wxPoint(10,25), wxDefaultSize,
- WXSIZEOF(abitrates_array), abitrates_array );
- wxStaticText *channels_label =
- new wxStaticText( panel, -1, wxU(_("Channels")));
- audio_channels_combo =
- new wxComboBox( panel, AudioTranscChans_Event, achannels_array[1],
- wxPoint(10,25), wxDefaultSize,
- WXSIZEOF(achannels_array), achannels_array );
- audio_channels_combo->SetSelection(1);
- audio_sub_sizer->Add( bitrate_label, 0,
- wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL );
- audio_sub_sizer->Add( audio_bitrate_combo, 1,
- wxEXPAND | wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL );
- audio_sub_sizer->Add( channels_label, 0,
- wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL );
- audio_sub_sizer->Add( audio_channels_combo, 1,
- wxEXPAND | wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL );
-
- audio_sizer->Add( audio_transc_checkbox, 0,
- wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL );
- audio_sizer->Add( audio_codec_combo, 1,
- wxEXPAND | wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL );
- audio_sizer->Add( audio_sub_sizer, 1,
- wxEXPAND | wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL );
-
- /* Create subtitles transcoding checkox */
- static const wxString wxscodecs_array[] =
- {
- wxT("dvbs")
- };
-
- wxFlexGridSizer *subtitles_sizer = new wxFlexGridSizer( 3, 1, 20 );
- subtitles_transc_checkbox =
- new wxCheckBox( panel, SubtitlesTranscEnable_Event,
- wxU(_("Subtitles codec")));
- subtitles_codec_combo =
- new wxComboBox( panel, SubtitlesTranscCodec_Event, wxscodecs_array[0],
- wxPoint(10,25), wxDefaultSize,
- WXSIZEOF(wxscodecs_array),
- wxscodecs_array, wxCB_READONLY );
- subtitles_codec_combo->SetSelection(0);
- subtitles_overlay_checkbox =
- new wxCheckBox( panel, SubtitlesOverlayEnable_Event,
- wxU(_("Subtitles overlay")));
-
- subtitles_sizer->Add( subtitles_transc_checkbox, 0,
- wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL );
- subtitles_sizer->Add( subtitles_codec_combo, 1,
- wxEXPAND | wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL );
- subtitles_sizer->Add( subtitles_overlay_checkbox, 0,
- wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL );
-
- /* Stuff everything into the main panel */
- panel_sizer->Add( video_sizer, 0,
- wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL | wxALL, 5 );
- panel_sizer->Add( audio_sizer, 0,
- wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL | wxALL, 5 );
- panel_sizer->Add( subtitles_sizer, 0,
- wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL | wxALL, 5 );
-
- panel->SetSizerAndFit( panel_sizer );
-
- /* Update transcoding panel */
- wxCommandEvent event( 0, VideoTranscEnable_Event );
- event.SetInt( 0 );
- OnTranscodingEnable( event );
- event.SetId( AudioTranscEnable_Event );
- OnTranscodingEnable( event );
- event.SetId( SubtitlesTranscEnable_Event );
- OnTranscodingEnable( event );
-
- return panel;
-}
-
-/*****************************************************************************
- * Events methods.
- *****************************************************************************/
-void SoutDialog::OnOk( wxCommandEvent& WXUNUSED(event) )
-{
- mrl_combo->Append( mrl_combo->GetValue() );
- config_PutInt( p_intf, "ttl", ttl_spin->GetValue());
- EndModal( wxID_OK );
-}
-
-void SoutDialog::OnCancel( wxCommandEvent& WXUNUSED(event) )
-{
- EndModal( wxID_CANCEL );
-}
-
-void SoutDialog::OnMRLChange( wxCommandEvent& event )
-{
- //mrl = event.GetString();
-}
-
-/*****************************************************************************
- * Access output panel event methods.
- *****************************************************************************/
-void SoutDialog::OnAccessTypeChange( wxCommandEvent& event )
-{
- int i;
- i_access_type = event.GetId() - AccessType1_Event;
-
- access_subpanels[i_access_type]->Enable( event.GetInt() );
-
- switch( i_access_type )
- {
- case UDP_ACCESS_OUT:
- case RTP_ACCESS_OUT:
- misc_subpanels[ANN_MISC_SOUT]->Enable( event.GetInt() );
-
- for( i = 1; i < ENCAPS_NUM; i++ )
- {
- encapsulation_radios[i]->Enable( !event.GetInt() );
- }
- if( event.GetInt() )
- {
- encapsulation_radios[TS_ENCAPSULATION]->SetValue(true);
- i_encapsulation_type = TS_ENCAPSULATION;
- }
- break;
- }
- UpdateMRL();
-}
-
-/*****************************************************************************
- * AnnounceMisc panel event methods.
- *****************************************************************************/
-void SoutDialog::OnSAPMiscChange( wxCommandEvent& event )
-{
- announce_addr->Enable( event.GetInt() );
- announce_group->Enable( event.GetInt() );
- UpdateMRL();
-}
-
-/*****************************************************************************
- * SAPAddr panel event methods.
- *****************************************************************************/
-void SoutDialog::OnAnnounceAddrChange( wxCommandEvent& WXUNUSED(event) )
-{
- UpdateMRL();
-}
-
-void SoutDialog::OnAnnounceGroupChange( wxCommandEvent& WXUNUSED(event) )
-{
- UpdateMRL();
-}
-
-/*****************************************************************************
- * File access output event methods.
- *****************************************************************************/
-void SoutDialog::OnFileChange( wxCommandEvent& WXUNUSED(event) )
-{
- UpdateMRL();
-}
-
-void SoutDialog::OnFileBrowse( wxCommandEvent& WXUNUSED(event) )
-{
- wxFileDialog dialog( this, wxU(_("Save file")), wxT(""), wxT(""), wxT("*"),
- wxSAVE | wxOVERWRITE_PROMPT );
-
- if( dialog.ShowModal() == wxID_OK )
- {
- file_combo->SetValue( dialog.GetPath() );
- UpdateMRL();
- }
-}
-
-void SoutDialog::OnFileDump( wxCommandEvent& event )
-{
- misc_panel->Enable( !event.GetInt() );
- encapsulation_panel->Enable( !event.GetInt() );
- transcoding_panel->Enable( !event.GetInt() );
-
- for( int i = 0; i < ACCESS_OUT_NUM; i++ )
- {
- if( i != FILE_ACCESS_OUT )
- {
- access_checkboxes[i]->Enable( !event.GetInt() );
- access_subpanels[i]->Enable( !event.GetInt() &&
- access_checkboxes[i]->IsChecked() );
- }
- }
-
- UpdateMRL();
-}
-
-/*****************************************************************************
- * Net access output event methods.
- *****************************************************************************/
-void SoutDialog::OnNetChange( wxCommandEvent& WXUNUSED(event) )
-{
- UpdateMRL();
-}
-
-/*****************************************************************************
- * Encapsulation panel event methods.
- *****************************************************************************/
-void SoutDialog::OnEncapsulationChange( wxCommandEvent& event )
-{
- i_encapsulation_type = event.GetId() - EncapsulationRadio1_Event;
- UpdateMRL();
-}
-
-/*****************************************************************************
- * Transcoding panel event methods.
- *****************************************************************************/
-void SoutDialog::OnTranscodingEnable( wxCommandEvent& event )
-{
- switch( event.GetId() )
- {
- case VideoTranscEnable_Event:
- video_codec_combo->Enable( event.GetInt() );
- video_bitrate_combo->Enable( event.GetInt() );
- video_scale_combo->Enable( event.GetInt() );
- break;
- case AudioTranscEnable_Event:
- audio_codec_combo->Enable( event.GetInt() );
- audio_bitrate_combo->Enable( event.GetInt() );
- audio_channels_combo->Enable( event.GetInt() );
- break;
- case SubtitlesTranscEnable_Event:
- subtitles_overlay_checkbox->Enable( !event.GetInt() );
- subtitles_codec_combo->Enable( event.GetInt() );
- break;
- case SubtitlesOverlayEnable_Event:
- subtitles_transc_checkbox->Enable( !event.GetInt() );
- break;
- }
-
- UpdateMRL();
-}
-
-void SoutDialog::OnTranscodingChange( wxCommandEvent& event )
-{
- UpdateMRL();
-}
+++ /dev/null
-/*****************************************************************************
- * streamout.hpp: Stream output dialog
- *****************************************************************************
- * Copyright (C) 1999-2005 the VideoLAN team
- * $Id$
- *
- * Authors: Gildas Bazin <gbazin@videolan.org>
- *
- * 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., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
- *****************************************************************************/
-
-#ifndef _WXVLC_STREAMOUT_H_
-#define _WXVLC_STREAMOUT_H_
-
-#include "wxwidgets.hpp"
-#include <wx/spinctrl.h>
-
-namespace wxvlc
-{
- enum
- {
- PLAY_ACCESS_OUT = 0,
- FILE_ACCESS_OUT,
- HTTP_ACCESS_OUT,
- MMSH_ACCESS_OUT,
- RTP_ACCESS_OUT,
- UDP_ACCESS_OUT,
- ACCESS_OUT_NUM
- };
-
- enum
- {
- TS_ENCAPSULATION = 0,
- PS_ENCAPSULATION,
- MPEG1_ENCAPSULATION,
- OGG_ENCAPSULATION,
- ASF_ENCAPSULATION,
- MP4_ENCAPSULATION,
- MOV_ENCAPSULATION,
- WAV_ENCAPSULATION,
- RAW_ENCAPSULATION,
- AVI_ENCAPSULATION,
- ENCAPS_NUM
- };
-
- enum
- {
- ANN_MISC_SOUT = 0,
- TTL_MISC_SOUT,
- MISC_SOUT_NUM
- };
-
- class SoutDialog: public wxDialog
- {
- public:
- /* Constructor */
- SoutDialog( intf_thread_t *p_intf, wxWindow *p_parent );
- virtual ~SoutDialog();
-
- wxArrayString GetOptions();
-
- private:
- void UpdateMRL();
- wxPanel *AccessPanel( wxWindow* parent );
- wxPanel *MiscPanel( wxWindow* parent );
- wxPanel *EncapsulationPanel( wxWindow* parent );
- wxPanel *TranscodingPanel( wxWindow* parent );
- void ParseMRL();
-
- /* Event handlers (these functions should _not_ be virtual) */
- void OnOk( wxCommandEvent& event );
- void OnCancel( wxCommandEvent& event );
- void OnMRLChange( wxCommandEvent& event );
- void OnAccessTypeChange( wxCommandEvent& event );
-
- /* Event handlers for the file access output */
- void OnFileChange( wxCommandEvent& event );
- void OnFileBrowse( wxCommandEvent& event );
- void OnFileDump( wxCommandEvent& event );
-
- /* Event handlers for the net access output */
- void OnNetChange( wxCommandEvent& event );
-
- /* Event specific to the announce address */
- void OnAnnounceGroupChange( wxCommandEvent& event );
- void OnAnnounceAddrChange( wxCommandEvent& event );
-
- /* Event handlers for the encapsulation panel */
- void OnEncapsulationChange( wxCommandEvent& event );
-
- /* Event handlers for the transcoding panel */
- void OnTranscodingEnable( wxCommandEvent& event );
- void OnTranscodingChange( wxCommandEvent& event );
-
- /* Event handlers for the misc panel */
- void OnSAPMiscChange( wxCommandEvent& event );
-
- DECLARE_EVENT_TABLE();
-
- intf_thread_t *p_intf;
- wxWindow *p_parent;
-
- wxComboBox *mrl_combo;
-
- /* Controls for the access outputs */
- wxPanel *access_panel;
- wxPanel *access_subpanels[ACCESS_OUT_NUM];
- wxCheckBox *access_checkboxes[ACCESS_OUT_NUM];
-
- int i_access_type;
-
- wxComboBox *file_combo;
- wxCheckBox *dump_checkbox;
- wxSpinCtrl *net_ports[ACCESS_OUT_NUM];
- wxTextCtrl *net_addrs[ACCESS_OUT_NUM];
-
- /* Controls for the SAP announces and TTL setting */
- wxPanel *misc_panel;
- wxPanel *misc_subpanels[MISC_SOUT_NUM];
- wxCheckBox *sap_checkbox;
- wxTextCtrl *announce_group;
- wxTextCtrl *announce_addr;
- wxSpinCtrl *ttl_spin;
-
- /* Controls for the encapsulation */
- wxPanel *encapsulation_panel;
- wxRadioButton *encapsulation_radios[ENCAPS_NUM];
- int i_encapsulation_type;
-
- /* Controls for transcoding */
- wxPanel *transcoding_panel;
- wxCheckBox *video_transc_checkbox;
- wxComboBox *video_codec_combo;
- wxComboBox *audio_codec_combo;
- wxCheckBox *audio_transc_checkbox;
- wxComboBox *video_bitrate_combo;
- wxComboBox *audio_bitrate_combo;
- wxComboBox *audio_channels_combo;
- wxComboBox *video_scale_combo;
- wxComboBox *subtitles_codec_combo;
- wxCheckBox *subtitles_transc_checkbox;
- wxCheckBox *subtitles_overlay_checkbox;
-
- /* Misc controls */
- wxCheckBox *sout_all_checkbox;
- };
-
-};
-
-#endif
+++ /dev/null
-/*****************************************************************************
- * subtitles.cpp : wxWindows plugin for vlc
- *****************************************************************************
- * Copyright (C) 2000-2001 the VideoLAN team
- * $Id$
- *
- * 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., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
- *****************************************************************************/
-
-#include "dialogs/subtitles.hpp"
-#include <wx/combobox.h>
-#include <wx/statline.h>
-#include <wx/spinctrl.h>
-
-#ifndef wxRB_SINGLE
-# define wxRB_SINGLE 0
-#endif
-
-/*****************************************************************************
- * Event Table.
- *****************************************************************************/
-
-/* IDs for the controls and the menu commands */
-enum
-{
- FileBrowse_Event = wxID_HIGHEST,
-};
-
-BEGIN_EVENT_TABLE(SubsFileDialog, wxDialog)
- /* Button events */
- EVT_BUTTON(wxID_OK, SubsFileDialog::OnOk)
- EVT_BUTTON(wxID_CANCEL, SubsFileDialog::OnCancel)
- EVT_BUTTON(FileBrowse_Event, SubsFileDialog::OnFileBrowse)
-
-END_EVENT_TABLE()
-
-/*****************************************************************************
- * Constructor.
- *****************************************************************************/
-SubsFileDialog::SubsFileDialog( intf_thread_t *_p_intf, wxWindow* _p_parent ):
- wxDialog( _p_parent, -1, wxU(_("Subtitle options")),
- wxDefaultPosition, wxDefaultSize, wxDEFAULT_FRAME_STYLE )
-{
- /* Initializations */
- p_intf = _p_intf;
- p_parent = _p_parent;
- SetIcon( *p_intf->p_sys->p_icon );
-
- /* Create a panel to put everything in */
- wxPanel *panel = new wxPanel( this, -1 );
- panel->SetAutoLayout( TRUE );
- wxBoxSizer *main_sizer = new wxBoxSizer( wxVERTICAL );
- wxBoxSizer *panel_sizer = new wxBoxSizer( wxVERTICAL );
-
-#if 0
- /* Create the subtitles file textctrl */
- wxBoxSizer *file_sizer_sizer = new wxBoxSizer( wxHORIZONTAL );
- wxStaticBox *file_box = new wxStaticBox( panel, -1,
- wxU(_("Subtitles file")) );
- wxStaticBoxSizer *file_sizer = new wxStaticBoxSizer( file_box,
- wxHORIZONTAL );
- char *psz_subsfile = config_GetPsz( p_intf, "sub-file" );
- if( !psz_subsfile ) psz_subsfile = strdup("");
- file_combo = new wxComboBox( panel, -1, wxL2U(psz_subsfile),
- wxPoint(20,25), wxSize(300, -1) );
- free( psz_subsfile );
- wxButton *browse_button = new wxButton( panel, FileBrowse_Event,
- wxU(_("Browse...")) );
- file_sizer->Add( file_combo, 1, wxALL, 5 );
- file_sizer->Add( browse_button, 0, wxALL, 5 );
- file_sizer_sizer->Add( file_sizer, 1, wxEXPAND | wxALL, 5 );
- panel_sizer->Add( file_sizer, 0, wxEXPAND | wxALL, 5 );
-#endif
-
- /* Subtitles encoding */
- encoding_combo = NULL;
- module_config_t *p_item =
- config_FindConfig( VLC_OBJECT(p_intf), "subsdec-encoding" );
- if( p_item )
- {
- wxBoxSizer *enc_sizer_sizer = new wxBoxSizer( wxHORIZONTAL );
- wxStaticBox *enc_box = new wxStaticBox( panel, -1,
- wxU(_("Encoding")) );
- wxStaticBoxSizer *enc_sizer = new wxStaticBoxSizer( enc_box,
- wxHORIZONTAL );
- wxStaticText *label =
- new wxStaticText(panel, -1, wxU(p_item->psz_text));
- encoding_combo = new wxComboBox( panel, -1, wxU(p_item->value.psz),
- wxDefaultPosition, wxDefaultSize,
- 0, NULL, wxCB_READONLY );
-
- /* build a list of available options */
- for( int i_index = 0; p_item->ppsz_list && p_item->ppsz_list[i_index];
- i_index++ )
- {
- encoding_combo->Append( wxU(p_item->ppsz_list[i_index]) );
- if( p_item->value.psz && !strcmp( p_item->value.psz,
- p_item->ppsz_list[i_index] ) )
- encoding_combo->SetSelection( i_index );
- }
-
- if( p_item->value.psz )
- encoding_combo->SetValue( wxU(p_item->value.psz) );
- encoding_combo->SetToolTip( wxU(p_item->psz_longtext) );
-
- enc_sizer->Add( label, 0, wxALL | wxALIGN_CENTER, 5 );
- enc_sizer->Add( encoding_combo, 0, wxEXPAND | wxALL | wxALIGN_CENTER, 5 );
- enc_sizer_sizer->Add( enc_sizer, 1, wxEXPAND | wxALL, 5 );
- panel_sizer->Add( enc_sizer, 0, wxEXPAND | wxALL, 5 );
- }
-
- /* Misc Subtitles options */
- wxBoxSizer *misc_sizer_sizer = new wxBoxSizer( wxHORIZONTAL );
- wxStaticBox *misc_box = new wxStaticBox( panel, -1,
- wxU(_("Options")) );
-
- wxStaticBoxSizer *misc_sizer = new wxStaticBoxSizer( misc_box,
- wxVERTICAL );
-
- wxFlexGridSizer *grid_sizer = new wxFlexGridSizer( 2, 1, 20 );
-
- /* Font size */
- p_item =
- config_FindConfig( VLC_OBJECT(p_intf), "freetype-rel-fontsize" );
- if( p_item )
- {
- wxBoxSizer *size_sizer = new wxBoxSizer( wxHORIZONTAL );
- wxStaticText *label =
- new wxStaticText(panel, -1, wxU(p_item->psz_text));
- size_combo = new wxComboBox( panel, -1, wxT(""),
- wxDefaultPosition, wxDefaultSize,
- 0, NULL, wxCB_READONLY );
-
- /* build a list of available options */
- for( int i_index = 0; i_index < p_item->i_list; i_index++ )
- {
- size_combo->Append( wxU(p_item->ppsz_list_text[i_index]),
- (void *)p_item->pi_list[i_index] );
- if( p_item->value.i == p_item->pi_list[i_index] )
- {
- size_combo->SetSelection( i_index );
- size_combo->SetValue(wxU(p_item->ppsz_list_text[i_index]));
- }
- }
-
- size_combo->SetToolTip( wxU(p_item->psz_longtext) );
-
- size_sizer->Add( label, 0, wxRIGHT | wxALIGN_CENTER, 5 );
- size_sizer->Add( size_combo, 0, wxLEFT | wxALIGN_CENTER, 5 );
- grid_sizer->Add( size_sizer, 1, wxEXPAND | wxALL, 5 );
- }
-
- p_item =
- config_FindConfig( VLC_OBJECT(p_intf), "subsdec-align" );
- if( p_item )
- {
- wxBoxSizer *align_sizer = new wxBoxSizer( wxHORIZONTAL );
- wxStaticText *label =
- new wxStaticText(panel, -1, wxU(p_item->psz_text));
- align_combo = new wxComboBox( panel, -1, wxT(""),
- wxDefaultPosition, wxDefaultSize,
- 0, NULL, wxCB_READONLY );
-
- /* build a list of available options */
- for( int i_index = 0; i_index < p_item->i_list; i_index++ )
- {
- align_combo->Append( wxU(p_item->ppsz_list_text[i_index]),
- (void *)p_item->pi_list[i_index] );
- if( p_item->value.i == p_item->pi_list[i_index] )
- {
- align_combo->SetSelection( i_index );
- align_combo->SetValue(wxU(p_item->ppsz_list_text[i_index]));
- }
- }
-
- align_combo->SetToolTip( wxU(p_item->psz_longtext) );
-
- align_sizer->Add( label, 0, wxRIGHT | wxALIGN_CENTER, 5 );
- align_sizer->Add( align_combo, 0, wxLEFT | wxALIGN_CENTER, 5 );
- grid_sizer->Add( align_sizer, 1, wxEXPAND | wxALL, 5 );
- }
-
- misc_sizer->Add( grid_sizer, 1, wxEXPAND | wxALL , 5 );
-
- grid_sizer = new wxFlexGridSizer( 4, 1, 20 );
-
- wxStaticText *label =
- new wxStaticText(panel, -1, wxU(_("Frames per second")));
-
- fps_ctrl = new wxTextCtrl( panel, -1,
- wxString::Format(wxT("%.3f"),
- config_GetFloat( p_intf, "sub-fps" )),
- wxDefaultPosition, wxDefaultSize);
- fps_ctrl->SetToolTip( wxU(_("Override frames per second. "
- "It will only work with MicroDVD and SubRIP subtitles.")) );
- grid_sizer->Add( label, 0, wxALIGN_CENTER, 5 );
- grid_sizer->Add( fps_ctrl, 0,wxALIGN_CENTER, 5 );
-
-
- wxStaticText *label_delay =
- new wxStaticText(panel, -1, wxU(_("Delay")));
-
- int i_delay = config_GetInt( p_intf, "sub-delay" );
- /* Outside the new wxSpinCtrl to avoid an internal error in gcc2.95 ! */
- wxString format_delay(wxString::Format(wxT("%i"), i_delay ));
- delay_spinctrl = new wxSpinCtrl( panel, -1, format_delay,
- wxDefaultPosition, wxDefaultSize,
- wxSP_ARROW_KEYS,
- -70000, 70000, i_delay );
- delay_spinctrl->SetToolTip( wxU(_("Set subtitle delay (in 1/10s)" ) ) );
-
- grid_sizer->Add( label_delay , 0, wxALIGN_CENTER, 5 );
- grid_sizer->Add( delay_spinctrl, 0, wxALIGN_CENTER, 5 );
-
- misc_sizer->Add( grid_sizer, 0, wxALL, 5 );
-
- misc_sizer_sizer->Add( misc_sizer, 1, wxEXPAND | wxALL, 5 );
-
- panel_sizer->Add( misc_sizer, 0, wxEXPAND | wxALL, 5 );
-
- /* Separation */
- wxStaticLine *static_line = new wxStaticLine( panel, wxID_OK );
-
- /* Create the buttons */
- wxButton *ok_button = new wxButton( panel, wxID_OK, wxU(_("&OK")) );
- ok_button->SetDefault();
- wxButton *cancel_button = new wxButton( panel, wxID_CANCEL,
- wxU(_("&Cancel")) );
-
- /* Place everything in sizers */
- wxStdDialogButtonSizer *button_sizer = new wxStdDialogButtonSizer;
- button_sizer->AddButton( ok_button );
- button_sizer->AddButton( cancel_button );
- button_sizer->Realize();
-
- panel_sizer->Add( static_line, 0, wxEXPAND | wxALL, 5 );
- panel_sizer->Add( button_sizer, 0, wxEXPAND | wxALL, 5 );
- panel_sizer->Layout();
- panel->SetSizerAndFit( panel_sizer );
- main_sizer->Add( panel, 1, wxGROW, 0 );
- main_sizer->Layout();
- SetSizerAndFit( main_sizer );
-}
-
-SubsFileDialog::~SubsFileDialog()
-{
-}
-
-/*****************************************************************************
- * Private methods.
- *****************************************************************************/
-
-/*****************************************************************************
- * Events methods.
- *****************************************************************************/
-void SubsFileDialog::OnOk( wxCommandEvent& WXUNUSED(event) )
-{
- EndModal( wxID_OK );
-}
-
-void SubsFileDialog::OnCancel( wxCommandEvent& WXUNUSED(event) )
-{
- EndModal( wxID_CANCEL );
-}
-
-void SubsFileDialog::OnFileBrowse( wxCommandEvent& WXUNUSED(event) )
-{
-#if 0
- wxFileDialog dialog( this, wxU(_("Open file")),
- wxT(""), wxT(""), wxT("*"), wxOPEN );
-
- if( dialog.ShowModal() == wxID_OK )
- {
- file_combo->SetValue( dialog.GetPath() );
- }
-#endif
-}
+++ /dev/null
-/*****************************************************************************
- * subtitles.hpp: private wxWindows interface description
- *****************************************************************************
- * Copyright (C) 1999-2005 the VideoLAN team
- * $Id$
- *
- * Authors: Gildas Bazin <gbazin@videolan.org>
- *
- * 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., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
- *****************************************************************************/
-
-#ifndef _WXVLC_SUBTITLES_H_
-#define _WXVLC_SUBTITLES_H_
-
-#include "wxwidgets.hpp"
-#include <wx/spinctrl.h>
-
-namespace wxvlc
-{
-/* Subtitles File Dialog */
-class SubsFileDialog: public wxDialog
-{
-public:
- /* Constructor */
- SubsFileDialog( intf_thread_t *p_intf, wxWindow *p_parent );
- virtual ~SubsFileDialog();
-
- wxComboBox *file_combo;
- wxComboBox *encoding_combo;
- wxComboBox *size_combo;
- wxComboBox *align_combo;
- wxTextCtrl *fps_ctrl;
- wxSpinCtrl *delay_spinctrl;
-
-private:
- /* Event handlers (these functions should _not_ be virtual) */
- void OnOk( wxCommandEvent& event );
- void OnCancel( wxCommandEvent& event );
- void OnFileBrowse( wxCommandEvent& event );
-
- DECLARE_EVENT_TABLE();
-
- intf_thread_t *p_intf;
- wxWindow *p_parent;
-};
-
-};
-
-#endif
-
+++ /dev/null
-/*****************************************************************************
- * updatevlc.cpp : VLC Update checker
- *****************************************************************************
- * Copyright (C) 2000-2004 the VideoLAN team
- * $Id$
- *
- * Authors: Antoine Cellerier <dionoea@videolan.org>
- *
- * 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., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
- *****************************************************************************/
-
-
-/*****************************************************************************
- * Preamble
- *****************************************************************************/
-#include "updatevlc.hpp"
-
-#ifdef UPDATE_CHECK
-#include <wx/imaglist.h>
-
-#include "bitmaps/update_ascii.xpm"
-#include "bitmaps/update_binary.xpm"
-#include "bitmaps/update_document.xpm"
-#include "bitmaps/update_info.xpm"
-#include "bitmaps/update_source.xpm"
-
-/*****************************************************************************
- * Event Table.
- *****************************************************************************/
-
-/* IDs for the controls and the menu commands */
-enum
-{
- Close_Event,
- CheckForUpdate_Event,
- ChooseItem_Event
-};
-
-BEGIN_EVENT_TABLE(UpdateVLC, wxFrame)
- /* Button events */
- EVT_BUTTON(wxID_OK, UpdateVLC::OnButtonClose)
- EVT_BUTTON(CheckForUpdate_Event, UpdateVLC::OnCheckForUpdate)
-
- /* Hide the window when the user closes the window */
- EVT_CLOSE(UpdateVLC::OnClose)
-
-END_EVENT_TABLE()
-
-/*****************************************************************************
- * Constructor.
- *****************************************************************************/
-UpdateVLC::UpdateVLC( intf_thread_t *_p_intf, wxWindow *p_parent ):
- wxFrame( p_parent, -1, wxU(_("Updates")),
- wxDefaultPosition, wxDefaultSize,
- wxSYSTEM_MENU|wxCLOSE_BOX|wxFRAME_FLOAT_ON_PARENT
- |wxFRAME_TOOL_WINDOW|wxCAPTION )
-{
- /* Initializations */
- p_intf = _p_intf;
- SetIcon( *p_intf->p_sys->p_icon );
- SetAutoLayout( TRUE );
-
- wxBoxSizer *main_sizer = new wxBoxSizer( wxVERTICAL );
- wxButton *update_button =
- new wxButton( this, CheckForUpdate_Event,
- wxU(_("Check for updates")) );
- main_sizer->Add( update_button );
- SetSizerAndFit( main_sizer );
-
- p_update = update_New( p_intf );
-}
-
-
-UpdateVLC::~UpdateVLC()
-{
- update_Delete( p_update );
-}
-
-void UpdateVLC::OnButtonClose( wxCommandEvent& event )
-{
- wxCloseEvent cevent;
- OnClose(cevent);
-}
-
-void UpdateVLC::OnClose( wxCloseEvent& WXUNUSED(event) )
-{
- Hide();
-}
-
-void UpdateVLC::OnCheckForUpdate( wxCommandEvent& event )
-{
- update_Check( p_update, NULL, this );
- wxBoxSizer *main_sizer = new wxBoxSizer( wxVERTICAL );
-
- DestroyChildren();
-
- /*list->InsertItem( list->GetItemCount(),
- wxU(p_uit->file.psz_description)+wxU("\n")
- + wxU(p_uit->release.psz_version)+wxU(" ")
- + wxU(psz_tmp),
- i_image );*/
-
- if( update_NeedUpgrade( p_update ) )
- {
- update_release_t *p_release = update_GetRelease( p_update );
- assert( p_release );
- main_sizer->Add( new wxStaticText( this, -1, wxU( p_release->psz_desc )
- + wxU( "\nYou can download the latest version of VLC at the adress :\n" )
- + wxU( p_release->psz_url ) ) );
- }
- else
- main_sizer->Add( new wxStaticText( this, -1,
- wxU( _( "\nYou have the latest version of VLC\n" ) ) ) );
-
- SetSizerAndFit( main_sizer );
- Layout();
-}
-#endif
+++ /dev/null
-/*****************************************************************************
- * updatevlc.hpp: VLC Update checker
- *****************************************************************************
- * Copyright (C) 1999-2005 the VideoLAN team
- * $Id$
- *
- * Authors: Antoine Cellerier <dionoea@videolan.org>
- *
- * 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., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
- *****************************************************************************/
-
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include <vlc_common.h>
-
-#ifdef UPDATE_CHECK
-
-#ifndef _WXVLC_UPDATEVLC_H_
-#define _WXVLC_UPDATEVLC_H_
-
-#include <vlc_update.h>
-
-#include "wxwidgets.hpp"
-#include <wx/treectrl.h>
-#include <wx/listctrl.h>
-
-class wxTreeCtrl;
-
-namespace wxvlc
-{
- class UpdateVLC: public wxFrame
- {
- public:
- UpdateVLC( intf_thread_t *p_intf, wxWindow *p_parent );
- virtual ~UpdateVLC();
-
- private:
- void OnButtonClose( wxCommandEvent& event );
- void OnClose( wxCloseEvent& WXUNUSED(event) );
- void OnCheckForUpdate( wxCommandEvent& event );
- void OnChooseItem( wxListEvent& event );
-
- DECLARE_EVENT_TABLE();
-
- intf_thread_t *p_intf;
- update_t *p_update;
- };
-};
-
-#endif
-
-#endif
+++ /dev/null
-/*****************************************************************************
- * vlm_panel.cpp: VLM Panel
- *****************************************************************************
- * Copyright (C) 2000-2005 the VideoLAN team
- * $Id$
- *
- * Authors: Clément Stenac <zorglub@videolan.org>
- *
- * 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., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
- *****************************************************************************/
-
-#if 0
-#include "dialogs/vlm/vlm_panel.hpp"
-#include "dialogs/vlm/vlm_wrapper.hpp"
-#include "dialogs/vlm/vlm_stream.hpp"
-#include "dialogs/vlm/vlm_streampanel.hpp"
-#include <wx/statline.h>
-
-#include "vlc_charset.h"
-
-enum
-{
- Notebook_Event,
- Timer_Event,
- Load_Event,
-};
-
-BEGIN_EVENT_TABLE( VLMPanel, wxPanel)
- EVT_TIMER( Timer_Event, VLMPanel::OnTimer )
- EVT_BUTTON( wxID_CLOSE, VLMPanel::OnClose )
- EVT_BUTTON( Load_Event, VLMPanel::OnLoad )
- EVT_BUTTON( wxID_SAVE, VLMPanel::OnSave )
-END_EVENT_TABLE()
-
-
-VLMPanel::VLMPanel( intf_thread_t *_p_intf, wxWindow *_p_parent ) :
- wxPanel( _p_parent, -1, wxDefaultPosition, wxDefaultSize ),
- timer( this, Timer_Event )
-{
- p_intf = _p_intf;
- p_parent = _p_parent;
-
- p_vlm = new VLMWrapper( p_intf );
- p_vlm->AttachVLM();
-
- SetAutoLayout( TRUE );
-
- wxBoxSizer *panel_sizer = new wxBoxSizer( wxVERTICAL );
-
- p_notebook = new wxNotebook( this, Notebook_Event );
-#if (!wxCHECK_VERSION(2,5,0))
- wxNotebookSizer *notebook_sizer = new wxNotebookSizer( p_notebook );
-#endif
- p_notebook->AddPage( BroadcastPanel( p_notebook ), wxU( _("Broadcasts") ) );
-#if 0
- p_notebook->AddPage( VODPanel( p_notebook ), wxU( _("VOD") ) );
-#endif
-#if (!wxCHECK_VERSION(2,5,0))
- panel_sizer->Add( notebook_sizer, 1, wxEXPAND | wxALL, 5 );
-#else
- panel_sizer->Add( p_notebook, 1 , wxEXPAND | wxALL, 5 );
-#endif
-
- wxBoxSizer *button_sizer = new wxBoxSizer( wxHORIZONTAL );
- button_sizer->Add( new wxButton( this, wxID_CLOSE, wxU(_("&Close") ) ) );
- button_sizer->Add( 0, 0, 1 );
- button_sizer->Add( new wxButton( this, Load_Event, wxU(_("Load") ) ), 0, wxRIGHT, 10 );
- button_sizer->Add( new wxButton( this, wxID_SAVE, wxU(_("&Save") ) ) );
- panel_sizer->Add( button_sizer, 0 , wxEXPAND | wxALL, 5 );
-
- panel_sizer->Layout();
- SetSizerAndFit( panel_sizer );
-
- Update();
-
- timer.Start( 300 );
-}
-
-VLMPanel::~VLMPanel()
-{
- delete p_vlm;
-}
-
-void VLMPanel::OnTimer( wxTimerEvent& event )
-{
- Update();
-}
-
-void VLMPanel::Update()
-{
- unsigned int i;
- for( i = 0 ; i < broadcasts.size(); i++ )
- {
- ((VLMBroadcastStreamPanel *)broadcasts[i])->b_found = false;
- }
- for( i = 0 ; i < vods.size(); i++ )
- {
- ((VLMVODStreamPanel *)vods[i])->b_found = false;
- }
-
- p_vlm->LockVLM();
- /* Iterate over the media, to find the panels to add / remove */
- /* FIXME: This code should be better wrapped */
- for( i = 0; i < p_vlm->NbMedia(); i++ )
- {
- vlm_media_t *p_media = p_vlm->GetMedia( i );
-
- if( p_media->i_type == BROADCAST_TYPE )
- {
- bool b_foundthis = false;
- for( unsigned int j = 0 ; j < broadcasts.size(); j++ )
- {
- VLMBroadcastStreamPanel *p_streamp =
- (VLMBroadcastStreamPanel *)(broadcasts[j]);
- /* FIXME: dangerous .. */
- if( p_streamp->GetStream()->p_media == p_media )
- {
- p_streamp->b_found = true;
- b_foundthis = true;
- break;
- }
- }
- /* Create the stream */
- if( !b_foundthis )
- {
- VLMBroadcastStream *p_broadcast =
- new VLMBroadcastStream( p_intf, p_media, p_vlm );
- AppendBroadcast( p_broadcast );
- }
- }
- else if( p_media->i_type == VOD_TYPE )
- {
- bool b_foundthis = false;
- for( unsigned int j = 0 ; i < vods.size(); i++ )
- {
- VLMVODStreamPanel *p_streamp = (VLMVODStreamPanel *)( vods[j] );
- if( p_streamp->GetStream()->p_media == p_media )
- {
- p_streamp->b_found = true;
- b_foundthis = true;
- break;
- }
- }
- /* Create it */
- if( !b_foundthis )
- {
- VLMVODStream *p_vod = new VLMVODStream(p_intf, p_media, p_vlm );
- AppendVOD( p_vod );
- }
- }
- }
-
- /* Those not marked as found must be removed */
- vector<VLMBroadcastStreamPanel *>::iterator it = broadcasts.begin();
- while( it < broadcasts.end() )
- {
- if( (*it)->b_found == false )
- {
- vector<VLMBroadcastStreamPanel *>::iterator rem = it;
- it++;
- VLMBroadcastStreamPanel *p_remove = *rem;
- broadcasts.erase( rem );
- RemoveBroadcast( p_remove );
- delete p_remove;
- }
- else
- it++;
- }
- vector<VLMVODStreamPanel *>::iterator it2 = vods.begin();
- while( it2 < vods.end() )
- {
- if( (*it2)->b_found == false )
- {
- vector<VLMVODStreamPanel *>::iterator rem = it2;
- it2++;
- VLMVODStreamPanel *p_remove = *rem;
- vods.erase( rem );
- RemoveVOD( p_remove );
- delete p_remove;
- }
- else
- it2++;
- }
-
- /* Update sliders*/
- for( unsigned int j = 0 ; j < broadcasts.size(); j++ )
- {
- VLMBroadcastStreamPanel *p_streamp =
- (VLMBroadcastStreamPanel *)( broadcasts[j] );
- p_streamp->Update();
- }
- p_vlm->UnlockVLM();
-}
-
-void VLMPanel::OnClose( wxCommandEvent &event )
-{
- ((VLMFrame*)p_parent)->OnClose( *( new wxCloseEvent() ) );
-}
-
-void VLMPanel::OnLoad( wxCommandEvent &event )
-{
- p_file_dialog = new wxFileDialog( NULL, wxT(""), wxT(""), wxT(""),
- wxT("*"), wxOPEN | wxMULTIPLE );
- if( p_file_dialog == NULL ) return;
-
- p_file_dialog->SetTitle( wxU(_("Load Configuration") ) );
- if( p_file_dialog->ShowModal() == wxID_OK )
- {
- vlm_Load( p_vlm->GetVLM(), p_file_dialog->GetPath().mb_str(wxConvUTF8) );
- }
- Update();
-}
-
-void VLMPanel::OnSave( wxCommandEvent &event )
-{
- p_file_dialog = new wxFileDialog( NULL, wxT(""), wxT(""), wxT(""),
- wxT("*"), wxSAVE | wxOVERWRITE_PROMPT );
- if( p_file_dialog == NULL ) return;
-
- p_file_dialog->SetTitle( wxU(_("Save Configuration") ) );
- if( p_file_dialog->ShowModal() == wxID_OK )
- {
- vlm_Save( p_vlm->GetVLM(), p_file_dialog->GetPath().mb_str(wxConvUTF8) );
- }
-}
-
-/*************************
- * Broadcasts management
- *************************/
-wxPanel * VLMPanel::BroadcastPanel( wxWindow *parent )
-{
- broadcasts_panel = new wxPanel( parent, -1, wxDefaultPosition, wxSize( 500, 350 ) );
- broadcasts_sizer = new wxBoxSizer( wxVERTICAL );
-
- wxStaticBox *add_box = new wxStaticBox( broadcasts_panel, -1,
- wxU( _( "New broadcast") ) );
- wxStaticBoxSizer *box_sizer = new wxStaticBoxSizer( add_box, wxHORIZONTAL );
- box_sizer->Add( AddBroadcastPanel( broadcasts_panel), 0, wxEXPAND|wxALL, 5 );
- box_sizer->Layout();
-
- broadcasts_sizer->Add( box_sizer, 0, wxEXPAND|wxALL, 5 );
-
- wxStaticLine *static_line = new wxStaticLine( broadcasts_panel, wxID_ANY );
- broadcasts_sizer->Add( static_line, 0, wxEXPAND | wxALL, 5 );
-
- scrolled_broadcasts = new wxScrolledWindow( broadcasts_panel, -1,
- wxDefaultPosition, wxDefaultSize,
- wxBORDER_NONE | wxVSCROLL );
-
- scrolled_broadcasts_sizer = new wxBoxSizer( wxVERTICAL );
- scrolled_broadcasts->SetAutoLayout( TRUE );
- scrolled_broadcasts->SetScrollRate( 5,5 );
- scrolled_broadcasts->SetSizerAndFit( scrolled_broadcasts_sizer );
-
- broadcasts_sizer->Add( scrolled_broadcasts, 1, wxEXPAND| wxALL, 5 );
- broadcasts_sizer->Layout();
-
- broadcasts_panel->SetSizerAndFit( broadcasts_sizer );
-
- return broadcasts_panel;
-}
-
-wxPanel * VLMPanel::AddBroadcastPanel( wxPanel *panel )
-{
- return new VLMAddStreamPanel( p_intf, panel, p_vlm, false,
- true );
-}
-
-void VLMPanel::AppendBroadcast( VLMBroadcastStream *p_broadcast )
-{
- VLMBroadcastStreamPanel *p_new =
- new VLMBroadcastStreamPanel( p_intf, scrolled_broadcasts,
- p_broadcast );
- p_new->b_found = true;
- scrolled_broadcasts_sizer->Add( p_new, 0, wxEXPAND | wxALL, 5 );
- scrolled_broadcasts_sizer->Layout();
- scrolled_broadcasts->FitInside();
- broadcasts.push_back( p_new );
-}
-
-void VLMPanel::RemoveBroadcast( VLMBroadcastStreamPanel *p_streamp )
-{
- scrolled_broadcasts_sizer->Remove( p_streamp );
- scrolled_broadcasts_sizer->Layout();
- scrolled_broadcasts->FitInside();
-}
-
-/*************************
- * VODS management
- *************************/
-wxPanel * VLMPanel::VODPanel( wxWindow *parent )
-{
- vods_panel = new wxPanel( parent, -1, wxDefaultPosition, wxSize( 500, 350 ) );
- return vods_panel;
-}
-
-wxPanel * VLMPanel::AddVODPanel( wxPanel *panel )
-{
- return new VLMAddStreamPanel( p_intf, panel, p_vlm, false,
- false );
-}
-
-void VLMPanel::AppendVOD( VLMVODStream *p_vod )
-{
- VLMVODStreamPanel *p_new =
- new VLMVODStreamPanel( p_intf, scrolled_vods, p_vod );
- p_new->b_found = true;
- scrolled_vods_sizer->Add( p_new, 0, wxEXPAND | wxALL, 5 );
- scrolled_vods_sizer->Layout();
- scrolled_vods->FitInside();
- vods.push_back( p_new );
-}
-
-void VLMPanel::RemoveVOD( VLMVODStreamPanel *p_streamp )
-{
- scrolled_vods_sizer->Remove( p_streamp );
- scrolled_vods_sizer->Layout();
- scrolled_vods->FitInside();
-}
-
-/****************************************************************************
- * VLM Add Broadcast panel implementation
- *****************************************************************************/
-enum
-{
- Create_Event,
- Clear_Event,
- ChooseInput_Event,
- ChooseOutput_Event,
-};
-
-BEGIN_EVENT_TABLE( VLMAddStreamPanel, wxPanel)
- EVT_BUTTON( Create_Event, VLMAddStreamPanel::OnCreate )
- EVT_BUTTON( Clear_Event, VLMAddStreamPanel::OnClear )
- EVT_BUTTON( ChooseInput_Event, VLMAddStreamPanel::OnChooseInput )
- EVT_BUTTON( ChooseOutput_Event, VLMAddStreamPanel::OnChooseOutput )
-END_EVENT_TABLE()
-
-VLMAddStreamPanel::VLMAddStreamPanel( intf_thread_t *_p_intf,
- wxWindow *_p_parent, VLMWrapper *_p_vlm,
- bool _b_edit, bool _b_broadcast ):
- wxPanel( _p_parent, -1, wxDefaultPosition, wxDefaultSize )
-{
- p_intf = _p_intf;
- p_parent = _p_parent;
- p_vlm = _p_vlm;
- b_edit = _b_edit;
- b_broadcast = _b_broadcast;
-
- p_open_dialog = NULL;
- p_sout_dialog = NULL;
-
- SetAutoLayout( TRUE );
-
- wxBoxSizer *panel_sizer = new wxBoxSizer( wxVERTICAL );
-
- wxFlexGridSizer *upper_sizer = new wxFlexGridSizer( 5, 2 );
- upper_sizer->AddGrowableCol( 1 );
- upper_sizer->AddGrowableCol( 3 );
-
- upper_sizer->Add( new wxStaticText( this, -1, wxU( _("Name") ) ), 0,
- wxALIGN_CENTER_VERTICAL, 0 );
- name_text = new wxTextCtrl( this, -1, wxU( "" ), wxDefaultPosition,
- wxSize( 150, -1 ) );
- upper_sizer->Add( name_text , 1, wxEXPAND | wxLEFT | wxRIGHT, 5 );
-
- upper_sizer->Add( new wxStaticText( this, -1, wxU( _("Input") ) ), 0,
- wxALIGN_CENTER_VERTICAL, 0 );
- input_text = new wxTextCtrl( this, -1, wxU( "" ) ,
- wxDefaultPosition, wxSize( 150, -1 ) );
- upper_sizer->Add( input_text , 1, wxEXPAND | wxLEFT | wxRIGHT, 5 );
- upper_sizer->Add( new wxButton( this, ChooseInput_Event, wxU( _("Choose") ) ) );
-
- upper_sizer->Add( 0,0 );
- upper_sizer->Add( 0,0 );
-
- upper_sizer->Add( new wxStaticText( this, -1, wxU( _("Output") ) ), 0,
- wxALIGN_CENTER_VERTICAL, 0 );
- output_text = new wxTextCtrl( this, -1, wxU( "" ) ,
- wxDefaultPosition, wxSize( 150, -1 ) );
- upper_sizer->Add( output_text, 1, wxEXPAND | wxLEFT | wxRIGHT, 5 );
- upper_sizer->Add( new wxButton( this, ChooseOutput_Event,
- wxU( _("Choose") ) ) );
-
- panel_sizer->Add( upper_sizer, 0, wxEXPAND | wxALL, 5 );
-
- wxBoxSizer *lower_sizer = new wxBoxSizer( wxHORIZONTAL );
- enabled_checkbox = new wxCheckBox( this, -1, wxU( _("Enabled" ) ) );
- enabled_checkbox->SetValue( true );
- lower_sizer->Add( enabled_checkbox, 1 , wxEXPAND | wxALL , 5 );
- if( b_broadcast )
- {
- loop_checkbox = new wxCheckBox( this, -1, wxU( _("Loop" ) ) );
- lower_sizer->Add( loop_checkbox, 1 , wxEXPAND | wxALL , 5 );
- }
-
- if( !b_edit )
- {
- lower_sizer->Add( new wxButton( this, wxID_CLEAR,
- wxU( _( "&Clear" ) ) ),
- 0 , wxEXPAND | wxALL , 5 );
- }
- lower_sizer->Add( new wxButton( this, Create_Event,
- wxU( _( b_edit ? "OK" : N_("Create") ) ) ),
- 0 , wxEXPAND | wxALL , 5 );
-
-
- panel_sizer->Add( lower_sizer, 0 , wxEXPAND| wxALL, 5 );
- panel_sizer->Layout();
- SetSizerAndFit( panel_sizer );
-}
-
-VLMAddStreamPanel::~VLMAddStreamPanel()
-{
-}
-
-void VLMAddStreamPanel::Load( VLMStream *p_stream )
-{
- name_text->SetValue( wxU( p_stream->p_media->psz_name ) );
- name_text->SetEditable( false );
- if( p_stream->p_media->i_input > 0 )
- {
- input_text->SetValue( wxU( p_stream->p_media->input[0] ) );
- }
- output_text->SetValue( wxU( p_stream->p_media->psz_output ) );
- enabled_checkbox->SetValue( p_stream->p_media->b_enabled );
- if( b_broadcast)
- loop_checkbox->SetValue( p_stream->p_media->b_loop );
-}
-
-void VLMAddStreamPanel::OnCreate( wxCommandEvent &event )
-{
- char *psz_name = wxFromLocale( name_text->GetValue() );
- char *psz_input = wxFromLocale( input_text->GetValue() );
- char *psz_output = wxFromLocale( output_text->GetValue() );
- if( b_broadcast && ! b_edit )
- {
- p_vlm->AddBroadcast( psz_name, psz_input, psz_output,
- enabled_checkbox->IsChecked() ? true: false,
- loop_checkbox->IsChecked() ? true : false );
- }
- else if( b_broadcast && b_edit )
- {
- p_vlm->EditBroadcast( psz_name, psz_input, psz_output,
- enabled_checkbox->IsChecked() ? true: false,
- loop_checkbox->IsChecked() ? true : false );
- }
- else if( !b_broadcast && !b_edit )
- {
- p_vlm->AddVod( psz_name, psz_input, psz_output,
- enabled_checkbox->IsChecked() ? true: false,
- loop_checkbox->IsChecked() ? true : false );
- }
- else
- {
- p_vlm->EditVod( psz_name, psz_input, psz_output,
- enabled_checkbox->IsChecked() ? true: false,
- loop_checkbox->IsChecked() ? true : false );
- }
- wxLocaleFree( psz_name) ; wxLocaleFree( psz_input ) ;
- wxLocaleFree( psz_output);
- if( !b_edit )
- OnClear( event );
- if( b_edit )
- p_parent->Hide();
-}
-
-void VLMAddStreamPanel::OnClear( wxCommandEvent &event )
-{
- name_text->SetValue( wxU("") );
- input_text->SetValue( wxU("") );
- output_text->SetValue( wxU("") );
-}
-
-void VLMAddStreamPanel::OnChooseInput( wxCommandEvent &event )
-{
- if( p_open_dialog == NULL )
- p_open_dialog = new OpenDialog( p_intf, this, -1, -1, OPEN_STREAM );
-
- if( p_open_dialog && p_open_dialog->ShowModal() == wxID_OK )
- {
- input_text->SetValue( p_open_dialog->mrl[0] );
- }
-}
-
-void VLMAddStreamPanel::OnChooseOutput( wxCommandEvent &event )
-{
- if( p_sout_dialog == NULL )
- p_sout_dialog = new SoutDialog( p_intf, this );
-
- if( p_sout_dialog && p_sout_dialog->ShowModal() == wxID_OK )
- {
- wxString sout = (p_sout_dialog->GetOptions())[0] ;
- sout = sout.AfterFirst( '=' );
- output_text->SetValue( sout );
- }
-}
-
-/****************************************************************************
- * VLM Frame implementation
- ****************************************************************************/
-enum
-{
-};
-
-BEGIN_EVENT_TABLE( VLMFrame, wxFrame )
- EVT_CLOSE( VLMFrame::OnClose )
-END_EVENT_TABLE()
-
-VLMFrame::VLMFrame( intf_thread_t *_p_intf, wxWindow *_p_parent ) :
- wxFrame( _p_parent, -1, wxU( _("VLM") ),
- wxDefaultPosition, wxSize( 640,480 ), wxDEFAULT_FRAME_STYLE )
-{
- SetIcon( *_p_intf->p_sys->p_icon );
-
- wxBoxSizer *main_sizer = new wxBoxSizer( wxHORIZONTAL );
- vlm_panel = new VLMPanel( _p_intf, this );
-
-#if defined(WIN32)
- main_sizer->Add( vlm_panel, 1, wxGROW, 0 );
-#else
- main_sizer->Add( vlm_panel, 1, wxEXPAND | wxALL, 5 );
-#endif
- main_sizer->Layout();
- SetSizerAndFit( main_sizer );
-}
-
-void VLMFrame::OnClose( wxCloseEvent& WXUNUSED(event) )
-{
- Hide();
-}
-
-void VLMFrame::Update()
-{
- vlm_panel->Update();
-}
-
-VLMFrame::~VLMFrame()
-{
- delete vlm_panel;
-}
-
-/****************************************************************************
- * VLM Add stream Frame implementation
- ****************************************************************************/
-VLMEditStreamFrame::VLMEditStreamFrame( intf_thread_t *_p_intf,
- wxWindow *_p_parent, VLMWrapper *_p_vlm, bool _b_broadcast,
- VLMStream *p_stream ) :
- wxFrame( _p_parent, -1, wxU( _("VLM stream") ),
- wxDefaultPosition, wxSize( 640,480 ), wxDEFAULT_FRAME_STYLE )
-{
- SetIcon( *_p_intf->p_sys->p_icon );
-
- wxBoxSizer *main_sizer = new wxBoxSizer( wxHORIZONTAL );
- vlm_panel = new VLMAddStreamPanel( _p_intf, this, _p_vlm ,
- true, _b_broadcast );
-
- vlm_panel->Load( p_stream );
-
- main_sizer->Add( vlm_panel, 1, wxEXPAND | wxALL, 5 );
- main_sizer->Layout();
- SetSizerAndFit( main_sizer );
-}
-
-VLMEditStreamFrame::~VLMEditStreamFrame()
-{
-}
-#endif
-
+++ /dev/null
-/*****************************************************************************
- * vlm_panel.hpp: Header for the VLM panel
- *****************************************************************************
- * Copyright (C) 1999-2005 the VideoLAN team
- * $Id$
- *
- * Authors: Clément Stenac <zorglub@videolan.org>
- *
- * 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., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
- *****************************************************************************/
-
-#ifndef _WXVLC_VLMPANEL_H_
-#define _WXVLC_VLMPANEL_H_
-
-#include "wxwidgets.hpp"
-#include "dialogs/open.hpp"
-#include "dialogs/streamout.hpp"
-#include <wx/notebook.h>
-
-#include <vector>
-using namespace std;
-
-
-class VLMWrapper;
-class VLMStream;
-class VLMBroadcastStream;
-class VLMVODStream;
-
-namespace wxvlc
-{
- class VLMStreamPanel;
- class VLMBroadcastStreamPanel;
- class VLMVODStreamPanel;
-
- /** This class is the panel to add or edit a VLM stream
- * It can be embedded in the main VLM panel or on a separate frame
- */
- class VLMAddStreamPanel : public wxPanel
- {
- public:
- VLMAddStreamPanel( intf_thread_t *, wxWindow *, VLMWrapper *,
- bool, bool );
- virtual ~VLMAddStreamPanel();
- void Load( VLMStream *);
- private:
- void OnCreate( wxCommandEvent& );
- void OnClear( wxCommandEvent& );
- void OnChooseInput( wxCommandEvent& );
- void OnChooseOutput( wxCommandEvent& );
-
- wxTextCtrl *name_text;
- wxTextCtrl *input_text;
- wxTextCtrl *output_text;
-
- wxCheckBox *enabled_checkbox;
- wxCheckBox *loop_checkbox;
-
- intf_thread_t *p_intf;
- VLMWrapper *p_vlm;
-
- wxWindow *p_parent;
-
- bool b_edit, b_broadcast;
-
- OpenDialog *p_open_dialog;
- SoutDialog *p_sout_dialog;
-
- DECLARE_EVENT_TABLE();
- };
-
- /**
- * This class is the main VLM Manager panel
- */
- class VLMPanel : public wxPanel
- {
- public:
- VLMPanel( intf_thread_t *p_intf, wxWindow * );
- virtual ~VLMPanel();
-
- void Update();
-
- protected:
-
- private:
- VLMWrapper *p_vlm;
- intf_thread_t *p_intf;
- wxWindow *p_parent;
-
- wxFileDialog *p_file_dialog;
- wxTimer timer;
- void OnTimer( wxTimerEvent &);
- void OnClose( wxCommandEvent& );
- void OnLoad( wxCommandEvent& );
- void OnSave( wxCommandEvent& );
-
- /** Notebook */
- wxNotebook *p_notebook;
- DECLARE_EVENT_TABLE();
-
- /* Broadcast stuff */
- vector<VLMBroadcastStreamPanel *> broadcasts;
- wxPanel *broadcasts_panel;
- wxBoxSizer *broadcasts_sizer;
- wxScrolledWindow *scrolled_broadcasts;
- wxBoxSizer *scrolled_broadcasts_sizer;
- wxPanel *BroadcastPanel( wxWindow *);
- wxPanel *AddBroadcastPanel( wxPanel *);
- void AppendBroadcast( VLMBroadcastStream *);
- void RemoveBroadcast( VLMBroadcastStreamPanel *);
-
- /* VOD stuff */
- vector<VLMVODStreamPanel *> vods;
- wxPanel *vods_panel;
- wxBoxSizer *vods_sizer;
- wxScrolledWindow *scrolled_vods;
- wxBoxSizer *scrolled_vods_sizer;
- wxPanel *VODPanel( wxWindow *);
- wxPanel *AddVODPanel( wxPanel *);
- void AppendVOD( VLMVODStream *);
- void RemoveVOD( VLMVODStreamPanel *);
-
- };
-
- /** This class is the standard VLM frame
- * It only consists of the VLM panel
- */
- class VLMFrame: public wxFrame
- {
- public:
- VLMFrame( intf_thread_t *p_intf, wxWindow * );
- virtual ~VLMFrame();
-
- void Update();
- void OnClose( wxCloseEvent& );
- private:
- VLMPanel *vlm_panel;
- DECLARE_EVENT_TABLE();
- };
-
- /** This class is the edit dialog for a stream
- * It only consists of the VLM edit panel
- */
- class VLMEditStreamFrame: public wxFrame
- {
- public:
- VLMEditStreamFrame( intf_thread_t *p_intf, wxWindow *,
- VLMWrapper * , bool, VLMStream * );
- virtual ~VLMEditStreamFrame();
-
- private:
- VLMAddStreamPanel *vlm_panel;
- };
-};
-
-#endif
+++ /dev/null
-/*****************************************************************************
- * vlm_slider_manager.cpp : Manage an input slider for a VLM stream
- *****************************************************************************
- * Copyright (C) 2000-2005 the VideoLAN team
- * $Id$
- *
- * Authors: Clément Stenac <zorglub@videolan.org>
- *
- * 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., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
- *****************************************************************************/
-
-/*****************************************************************************
- * Preamble
- *****************************************************************************/
-#if 0
-#include "dialogs/vlm/vlm_slider_manager.hpp"
-#include "dialogs/vlm/vlm_stream.hpp"
-#include "dialogs/vlm/vlm_streampanel.hpp"
-
-/*****************************************************************************
- * Constructor.
- *****************************************************************************/
-VLMSliderManager::VLMSliderManager( intf_thread_t *_p_intf,
- VLMBroadcastStreamPanel *_p_sp )
-{
- p_intf = _p_intf;
- p_input = NULL;
-
- p_sp = _p_sp;
- slider = p_sp->p_slider;
-
- b_slider_free = true;
- time_string = wxU( "0:00:00 / 0:00:00");
-}
-
-VLMSliderManager::~VLMSliderManager()
-{
-}
-
-/*****************************************************************************
- * Public methods.
- *****************************************************************************/
-void VLMSliderManager::Update()
-{
- /* Update the input */
- if( p_input == NULL )
- {
- UpdateInput();
-
- if( p_input )
- {
- slider->SetValue( 0 );
- UpdateButtons( true );
- }
- }
- else if( p_input->b_dead )
- {
- HideSlider();
- UpdateButtons( false );
-
- vlc_object_release( p_input );
- p_input = NULL;
- }
-
- if( p_input && vlc_object_alive (p_input) )
- {
- vlc_value_t pos;
-
- /* Really manage the slider */
- var_Get( p_input, "position", &pos );
-
- if( pos.f_float > 0.0 && ! IsShown() ) ShowSlider();
- else if( pos.f_float <= 0.0 ) HideSlider();
-
- if( IsPlaying() && IsShown() )
- {
- /* Update the slider if the user isn't dragging it. */
- if( IsFree() )
- {
- char psz_time[ MSTRTIME_MAX_SIZE ];
- char psz_total[ MSTRTIME_MAX_SIZE ];
- vlc_value_t time;
- mtime_t i_seconds;
-
- /* Update the value */
- if( pos.f_float >= 0.0 )
- {
- i_slider_pos = (int)(SLIDER_MAX_POS * pos.f_float);
-
- slider->SetValue( i_slider_pos );
-
- var_Get( p_input, "time", &time );
- i_seconds = time.i_time / 1000000;
- secstotimestr ( psz_time, i_seconds );
-
- var_Get( p_input, "length", &time );
- i_seconds = time.i_time / 1000000;
- secstotimestr ( psz_total, i_seconds );
-
- UpdateTime( psz_time, psz_total );
- }
- }
- }
- }
-}
-
-/*****************************************************************************
- * Private methods.
- *****************************************************************************/
-void VLMSliderManager::UpdateInput()
-{
- if( p_sp->GetStream()->p_media->i_instance == 0 )
- {
- p_input = NULL;
- return;
- }
- /** FIXME !! */
- p_input = p_sp->GetStream()->p_media->instance[0]->p_input;
-}
-
-void VLMSliderManager::UpdateButtons( bool b_play )
-{
- if( b_play )
- {
- p_sp->TogglePlayButton( PLAYING_S );
- }
- else
- {
- p_sp->TogglePlayButton( PAUSE_S );
- }
-}
-
-bool VLMSliderManager::IsShown()
-{
- return slider->IsEnabled();
-}
-
-void VLMSliderManager::ShowSlider()
-{
- slider->Enable();
-}
-
-void VLMSliderManager::HideSlider()
-{
- slider->SetValue( 0 );
- slider->Disable();
- UpdateTime( "0:00:00", "0:00:00" );
-}
-
-bool VLMSliderManager::IsFree()
-{
- return b_slider_free;
-}
-
-bool VLMSliderManager::IsPlaying()
-{
- return true; /* Is it really useful ? */
-}
-
-void VLMSliderManager::UpdateTime( char *psz_time, char *psz_total )
-{
- time_string = wxU(psz_time) + wxString(wxT(" / ") ) +wxU(psz_total) ;
-}
-
-
-void VLMSliderManager::ProcessUpdate( wxScrollEvent &event )
-{
-
-#ifdef WIN32
- if( event.GetEventType() == wxEVT_SCROLL_THUMBRELEASE
- || event.GetEventType() == wxEVT_SCROLL_ENDSCROLL )
- {
-#endif
- if( i_slider_pos != event.GetPosition() && p_input )
- {
- vlc_value_t pos;
- pos.f_float = (float)event.GetPosition() / (float)SLIDER_MAX_POS;
-
- var_Set( p_input, "position", pos );
- }
-
-#ifdef WIN32
- b_slider_free = true;
- }
- else
- {
- b_slider_free = false;
-
- if( p_input )
- {
- /* Update stream date */
- char psz_time[ MSTRTIME_MAX_SIZE ], psz_total[ MSTRTIME_MAX_SIZE ];
- mtime_t i_seconds;
-
- i_seconds = var_GetTime( p_input, "length" ) / INT64_C( 1000000 );
- secstotimestr( psz_total, i_seconds );
-
- i_seconds = var_GetTime( p_input, "time" ) / INT64_C( 1000000 );
- secstotimestr( psz_time, i_seconds );
-
- time_string = wxU(psz_time) + wxString(wxT(" / ") ) +wxU(psz_total) ;
- }
- }
-#endif
-
-#undef WIN32
-}
-#endif
+++ /dev/null
-/*****************************************************************************
- * vlm_slider_manager.hpp: Header for slider_manager
- *****************************************************************************
- * Copyright (C) 1999-2005 the VideoLAN team
- * $Id$
- *
- * Authors: Clément Stenac <zorglub@videolan.org>
- *
- * 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., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
- *****************************************************************************/
-
-#ifndef _VLM_SLIDER_MANAGER_H_
-#define _VLM_SLIDER_MANAGER_H_
-
-#include "wxwidgets.hpp"
-
-namespace wxvlc
-{
- class VLMBroadcastStreamPanel;
- /**
- * This class manages a slider corresponding to the main input
- */
- class VLMSliderManager
- {
- public:
- VLMSliderManager( intf_thread_t *, VLMBroadcastStreamPanel * );
- virtual ~VLMSliderManager();
-
- wxString time_string;
-
- void Update();
- void ProcessUpdate( wxScrollEvent & );
-
- protected:
- bool b_slider_free;
- virtual void UpdateInput();
- virtual void UpdateButtons( bool );
- virtual void UpdateTime( char *, char *);
-
- virtual bool IsShown();
- virtual bool IsFree();
- virtual bool IsPlaying();
-
- virtual void HideSlider();
- virtual void ShowSlider();
-
- VLMBroadcastStreamPanel * p_sp;
-
- intf_thread_t * p_intf;
- input_thread_t *p_input;
- wxSlider *slider; ///< Slider for this input
- int i_slider_pos; ///< Current slider position
- };
-};
-
-#endif
+++ /dev/null
-/*****************************************************************************
- * vlm_stream.cpp : Implementation of the VLMStream class hierarchy
- *****************************************************************************
- * Copyright (C) 2000-2005 the VideoLAN team
- * $Id$
- *
- * Authors: Clément Stenac <zorglub@videolan.org>
- *
- * 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., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
- *****************************************************************************/
-
-#if 0
-#include "dialogs/vlm/vlm_stream.hpp"
-#include "dialogs/vlm/vlm_wrapper.hpp"
-
-/*****************************************************************************
- * VLMStream class
- *****************************************************************************/
-VLMStream::VLMStream( intf_thread_t *_p_intf, vlm_media_t *_p_media,
- VLMWrapper * _p_vlm )
-{
- p_intf = _p_intf;
- p_vlm = _p_vlm;
- p_media = _p_media;
-}
-
-VLMStream::~VLMStream()
-{
-}
-
-void VLMStream::Enable()
-{
- p_media->b_enabled = true;
-}
-
-void VLMStream::Disable()
-{
- p_media->b_enabled = false;
-}
-
-void VLMStream::Delete()
-{
- vlm_message_t *message;
- string command = "del \"" + string( p_media->psz_name ) + "\"";
- /* FIXME: Should be moved to vlm_Wrapper */
- vlm_ExecuteCommand( p_vlm->GetVLM(), (char*)command.c_str(), & message );
- vlm_MessageDelete( message );
-}
-
-/*****************************************************************************
- * VLMBroadcastStream class
- *****************************************************************************/
-VLMBroadcastStream::VLMBroadcastStream( intf_thread_t *_p_intf,
- vlm_media_t *_p_media, VLMWrapper *_p_vlm ): VLMStream( _p_intf, _p_media, _p_vlm )
-{
-
-}
-
-VLMBroadcastStream::~VLMBroadcastStream()
-{
-}
-
-void VLMBroadcastStream::Play()
-{
- vlm_message_t *message;
- string command = "control \"" + string( p_media->psz_name ) + "\" play";
- /* FIXME: Should be moved to vlm_Wrapper */
- vlm_ExecuteCommand( p_vlm->GetVLM(), (char*)command.c_str(), & message );
- vlm_MessageDelete( message );
-}
-
-void VLMBroadcastStream::Stop()
-{
- vlm_message_t *message;
- string command = "control \"" + string( p_media->psz_name ) + "\" stop";
- vlm_ExecuteCommand( p_vlm->GetVLM(), (char*)command.c_str(), & message );
- vlm_MessageDelete( message );
-}
-
-void VLMBroadcastStream::Pause()
-{
- vlm_message_t *message;
- string command = "control \"" + string( p_media->psz_name ) + "\" pause";
- vlm_ExecuteCommand( p_vlm->GetVLM(), (char*)command.c_str(), & message );
- vlm_MessageDelete( message );
-}
-
-/*****************************************************************************
- * VLMVODStream class
- *****************************************************************************/
-VLMVODStream::VLMVODStream( intf_thread_t *_p_intf, vlm_media_t *_p_media,
- VLMWrapper *_p_vlm ): VLMStream( _p_intf, _p_media, _p_vlm )
-{
-
-}
-
-VLMVODStream::~VLMVODStream()
-{
-}
-#endif
+++ /dev/null
-/*****************************************************************************
- * vlm_stream.hpp: Representation of a VLM Stream
- *****************************************************************************
- * Copyright (C) 1999-2005 the VideoLAN team
- * $Id$
- *
- * Authors: Clément Stenac <zorglub@videolan.org>
- *
- * 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., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
- *****************************************************************************/
-
-/* FIXME : This is not WX-specific and should be moved to core */
-#ifndef _VLM_STREAM_H_
-#define _VLM_STREAM_H_
-
-#include <vlc_common.h>
-#include <vlc_interface.h>
-#include <vlc_vlm.h>
-
-#include <string>
-using namespace std;
-
-class VLMWrapper;
-
-/**
- * This class encapsulates a VLM Stream and provides additional services
- */
-class VLMStream
-{
-public:
- VLMStream( intf_thread_t *, vlm_media_t * , VLMWrapper *);
- virtual ~VLMStream();
-
- vlm_media_t *p_media;
-
-
- void Delete();
- virtual void Disable();
- virtual void Enable();
-
- /* FIXME: provide accessor */
- VLMWrapper *p_vlm;
-protected:
- intf_thread_t *p_intf;
- friend class VLMWrapper;
-private:
-};
-
-/**
- * This class encapsulates a VLM Broadcast stream
- */
-class VLMBroadcastStream : public VLMStream
-{
-public:
- VLMBroadcastStream( intf_thread_t *, vlm_media_t *, VLMWrapper *);
- virtual ~VLMBroadcastStream();
-
- void Play();
- void Pause();
- void Stop();
-
-};
-
-/**
- * This class encapsulates a VLM VOD Stream
- */
-class VLMVODStream : public VLMStream
-{
-public:
- VLMVODStream( intf_thread_t *, vlm_media_t *, VLMWrapper *);
- virtual ~VLMVODStream();
-};
-
-#endif
+++ /dev/null
-/*****************************************************************************
- * vlm_streampanel:cpp
- *****************************************************************************
- * Copyright (C) 2000-2005 the VideoLAN team
- * $Id$
- *
- * Authors: Clément Stenac <zorglub@videolan.org>
- *
- * 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., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
- *****************************************************************************/
-
-#if 0
-#include "dialogs/vlm/vlm_streampanel.hpp"
-#include "dialogs/vlm/vlm_stream.hpp"
-#include "dialogs/vlm/vlm_slider_manager.hpp"
-
-#include "dialogs/vlm/vlm_panel.hpp"
-
-#include "bitmaps/play.xpm"
-#include "bitmaps/pause.xpm"
-#include "bitmaps/stop.xpm"
-#include "bitmaps/trash.xpm"
-#include "bitmaps/edit.xpm"
-
-enum
-{
- BPlay_Event,
- BStop_Event,
- BSlider_Event,
- BEdit_Event,
- BTrash_Event,
-};
-
-BEGIN_EVENT_TABLE( VLMBroadcastStreamPanel, wxPanel )
- EVT_BUTTON( BPlay_Event, VLMBroadcastStreamPanel::OnPlay )
- EVT_BUTTON( BStop_Event, VLMBroadcastStreamPanel::OnStop )
- EVT_BUTTON( BEdit_Event, VLMBroadcastStreamPanel::OnEdit )
- EVT_BUTTON( BTrash_Event, VLMBroadcastStreamPanel::OnTrash )
- EVT_COMMAND_SCROLL( BSlider_Event, VLMBroadcastStreamPanel::OnSliderUpdate )
-END_EVENT_TABLE()
-
-/***********************************************************************
- * VLMStream
- ***********************************************************************/
-VLMStreamPanel::VLMStreamPanel( intf_thread_t * _p_intf, wxWindow * _p_parent ):
- wxPanel( _p_parent, -1, wxDefaultPosition, wxDefaultSize )
-{
- p_intf = _p_intf;
- p_slider = NULL;
-}
-
-VLMStreamPanel::~VLMStreamPanel()
-{
-}
-
-/***********************************************************************
- * VLMBroadcastStream
- ***********************************************************************/
-VLMBroadcastStreamPanel::VLMBroadcastStreamPanel( intf_thread_t* _p_intf,
- wxWindow *_p_parent , VLMBroadcastStream *_stream ):
- VLMStreamPanel( _p_intf, _p_parent ),
- p_stream( _stream )
-{
- wxStaticBox *box = new wxStaticBox( this, -1,
- wxU( p_stream->p_media->psz_name ) );
-
- wxStaticBoxSizer *box_sizer = new wxStaticBoxSizer( box, wxHORIZONTAL );
-
- play_button = new wxBitmapButton( this, BPlay_Event,
- wxBitmap( play_xpm ) );
- play_button->SetToolTip( wxU(_("Play/Pause") ) );
- box_sizer->Add( play_button, 0, wxEXPAND | wxALL, 5 );
-
- wxBitmapButton *stop_button = new wxBitmapButton( this, BStop_Event,
- wxBitmap( stop_xpm ) );
- stop_button->SetToolTip( wxU(_("Stop") ) );
- box_sizer->Add( stop_button, 0, wxEXPAND | wxALL, 5 );
-
- p_slider = new wxSlider( this, BSlider_Event, 0, 0,
- SLIDER_MAX_POS, wxDefaultPosition, wxDefaultSize );
- p_slider->Disable();
- box_sizer->Add( p_slider, 1, wxEXPAND | wxALL, 5 );
-
- p_time = new wxStaticText( this, -1, wxU( "0:00:00 / 0:00:00") );
- box_sizer->Add( p_time, 0, wxALL | wxALIGN_CENTER_VERTICAL, 5 );
-
- wxBitmapButton *edit_button = new wxBitmapButton( this, BEdit_Event,
- wxBitmap( edit_xpm ) );
- edit_button->SetToolTip( wxU( _("Edit") ) );
- box_sizer->Add( edit_button, 0, wxEXPAND | wxALL , 5 );
-
- wxBitmapButton *trash_button = new wxBitmapButton( this, BTrash_Event,
- wxBitmap( trash_xpm ) );
- trash_button->SetToolTip( wxU( _("Delete" ) ) );
- box_sizer->Add( trash_button, 0, wxEXPAND | wxALL , 5 );
-
- box_sizer->Layout();
- SetSizerAndFit( box_sizer );
-
- p_sm = new VLMSliderManager( p_intf, this );
-}
-
-VLMBroadcastStreamPanel::~VLMBroadcastStreamPanel()
-{
-}
-
-void VLMBroadcastStreamPanel::TogglePlayButton( int state )
-{
- if( state == PLAYING_S )
- {
- play_button->SetBitmapLabel( wxBitmap( pause_xpm ) );
- }
- if( state == PAUSE_S )
- {
- play_button->SetBitmapLabel( wxBitmap( play_xpm ) );
- }
-}
-
-void VLMBroadcastStreamPanel::Update()
-{
- /* Update managed slider */
- p_sm->Update();
- p_time->SetLabel( p_sm->time_string );
-}
-
-void VLMBroadcastStreamPanel::OnPlay( wxCommandEvent &event )
-{
- /* FIXME: Factorize input / VLM code here */
- /* Handle multiple instance */
- if( p_stream->p_media->i_instance > 0 &&
- p_stream->p_media->instance[0]->p_input )
- {
- vlc_value_t val;
- vlc_object_hold( p_stream->p_media->instance[0]->p_input );
- var_Get( p_stream->p_media->instance[0]->p_input, "state", &val );
- if( val.i_int != PAUSE_S )
- {
- /* Pause */
- val.i_int = PAUSE_S;
- }
- else
- {
- /* Resume */
- val.i_int = PLAYING_S;
- }
- var_Set( p_stream->p_media->instance[0]->p_input, "state", val );
- TogglePlayButton( val.i_int );
- vlc_object_release( p_stream->p_media->instance[0]->p_input );
- }
- else
- {
- p_stream->Play();
- TogglePlayButton( PLAYING_S );
- }
-}
-
-void VLMBroadcastStreamPanel::OnStop( wxCommandEvent &event )
-{
- p_stream->Stop();
-}
-
-void VLMBroadcastStreamPanel::OnEdit( wxCommandEvent &event )
-{
- VLMEditStreamFrame *p_frame =
- new VLMEditStreamFrame( p_intf, this, p_stream->p_vlm, true,
- p_stream );
- p_frame->Show();
-}
-
-void VLMBroadcastStreamPanel::OnTrash( wxCommandEvent &event )
-{
- p_stream->Delete();
-}
-
-void VLMBroadcastStreamPanel::OnSliderUpdate( wxScrollEvent& event )
-{
- p_sm->ProcessUpdate( event );
-}
-
-/***********************************************************************
- * VLMVODStream
- ***********************************************************************/
-VLMVODStreamPanel::VLMVODStreamPanel( intf_thread_t* _p_intf,
- wxWindow *_p_parent , VLMVODStream *_stream ):
- VLMStreamPanel( _p_intf, _p_parent ),
- p_stream( _stream )
-{
-}
-
-VLMVODStreamPanel::~VLMVODStreamPanel()
-{
-}
-#endif
+++ /dev/null
-/*****************************************************************************
- * vlm_streampanel.hpp: Panel for a VLM stream
- *****************************************************************************
- * Copyright (C) 1999-2005 the VideoLAN team
- * $Id$
- *
- * Authors: Clément Stenac <zorglub@videolan.org>
- *
- * 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., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
- *****************************************************************************/
-
-#ifndef _VLM_STREAMPANEL_H_
-#define _VLM_STREAMPANEL_H_
-
-#include "wxwidgets.hpp"
-
-class VLMStream;
-class VLMBroadcastStream;
-class VLMVODStream;
-
-namespace wxvlc
-{
- class VLMSliderManager;
-
- /**
- * This class represents the panel for a VLM Stream
- * This class is abstract, it needs to be subclassed
- */
- class VLMStreamPanel : public wxPanel
- {
- public:
- VLMStreamPanel( intf_thread_t *, wxWindow * );
- virtual ~VLMStreamPanel();
-
- virtual void TogglePlayButton( int ) {};
- wxSlider *p_slider;
-
- virtual void Update() = 0;
- protected:
- intf_thread_t *p_intf;
- bool b_free;
- bool b_new; ///< Is it a new stream ?
- bool b_found; ///< Have we found the stream here ?
- friend class VLMPanel;
-
-
- private:
- };
-
- /**
- * This class represents the panel for a Broadcast VLM Stream
- */
- class VLMBroadcastStreamPanel : public VLMStreamPanel
- {
- public:
- VLMBroadcastStreamPanel( intf_thread_t *, wxWindow *,
- VLMBroadcastStream * );
- virtual ~VLMBroadcastStreamPanel();
- VLMBroadcastStream *GetStream() { return p_stream; }
-
- bool b_slider_free;
-
- VLMSliderManager *p_sm;
-
- virtual void Update();
-
- virtual void TogglePlayButton( int );
- protected:
-
- private:
- VLMBroadcastStream *p_stream;
- DECLARE_EVENT_TABLE();
-
- void OnPlay( wxCommandEvent &);
- void OnStop( wxCommandEvent &);
- void OnEdit( wxCommandEvent &);
- void OnTrash( wxCommandEvent &);
- void OnSliderUpdate( wxScrollEvent &);
-
-
- wxBitmapButton *play_button;
-
- wxStaticText *p_time;
- };
-
- /**
- * This class represents the panel for a VOD VLM Stream
- */
- class VLMVODStreamPanel : public VLMStreamPanel
- {
- public:
- VLMVODStreamPanel( intf_thread_t *, wxWindow *,
- VLMVODStream * );
- virtual ~VLMVODStreamPanel();
-
- VLMVODStream *GetStream() { return p_stream; }
-
- virtual void Update() {}
- protected:
-
- private:
- VLMVODStream *p_stream;
- };
-};
-
-#endif
+++ /dev/null
-/*****************************************************************************
- * vlm_wrapper.cpp : Wrapper around VLM
- *****************************************************************************
- * Copyright (C) 2000-2005 the VideoLAN team
- * $Id$
- *
- * Authors: Clément Stenac <zorglub@videolan.org>
- *
- * 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., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
- *****************************************************************************/
-
-/* FIXME: This is not wx-specific */
-
-#if 0
-#include "dialogs/vlm/vlm_wrapper.hpp"
-
-VLMWrapper::VLMWrapper( intf_thread_t *_p_intf )
-{
- p_intf = _p_intf;
- p_vlm = NULL;
-}
-
-VLMWrapper::~VLMWrapper()
-{
- /* FIXME :you have to destroy vlm here to close
- * but we shouldn't destroy vlm here in case somebody else wants it */
- if( p_vlm )
- vlm_Delete( p_vlm );
-}
-
-bool VLMWrapper::AttachVLM()
-{
- p_vlm = vlm_New( p_intf );
- return p_vlm ? true: false ;
-}
-
-void VLMWrapper::LockVLM()
-{
- vlc_object_lock( p_vlm );
-}
-
-void VLMWrapper::UnlockVLM()
-{
- vlc_object_unlock( p_vlm );
-}
-
-void VLMWrapper::AddBroadcast( const char* name, const char* input,
- const char* output,
- bool b_enabled, bool b_loop )
-{
- vlm_message_t *message;
- string command = "new \"" + string(name) + "\" broadcast";
- vlm_ExecuteCommand( p_vlm, command.c_str(), &message );
- vlm_MessageDelete( message );
- EditBroadcast( name, input, output, b_enabled, b_loop );
-}
-
-void VLMWrapper::EditBroadcast( const char* name, const char* input,
- const char* output,
- bool b_enabled, bool b_loop )
-{
- vlm_message_t *message;
- string command;
- command = "setup \"" + string(name) + "\" inputdel all";
- vlm_ExecuteCommand( p_vlm, command.c_str(), &message );
- vlm_MessageDelete( message );
- command = "setup \"" + string(name) + "\" input \"" + string(input) + "\"";
- vlm_ExecuteCommand( p_vlm, command.c_str(), &message );
- vlm_MessageDelete( message );
- if( strlen(output) > 0 )
- {
- command = "setup \"" + string(name) + "\" output \"" + string(output) + "\"";
- vlm_ExecuteCommand( p_vlm, (char*)command.c_str(), &message );
- vlm_MessageDelete( message );
- }
- if( b_enabled )
- {
- command = "setup \"" + string(name) + "\" enabled";
- vlm_ExecuteCommand( p_vlm, command.c_str(), &message );
- vlm_MessageDelete( message );
- }
- if( b_loop )
- {
- command = "setup \"" + string(name) + "\" loop";
- vlm_ExecuteCommand( p_vlm, command.c_str(), &message );
- vlm_MessageDelete( message );
- }
-}
-
-void VLMWrapper::AddVod( const char* name, const char* input,
- const char* output,
- bool b_enabled, bool b_loop )
-{
- vlm_message_t *message;
- string command = "new \"" + string(name) + "\" vod";
- vlm_ExecuteCommand( p_vlm, command.c_str(), &message );
- vlm_MessageDelete( message );
- EditVod( name, input, output, b_enabled, b_loop );
-}
-
-void VLMWrapper::EditVod( const char* name, const char* input,
- const char* output,
- bool b_enabled, bool b_loop )
-{
- vlm_message_t *message;
- string command;
- command = "setup \"" + string(name) + "\" input \"" + string(input) + "\"";
- vlm_ExecuteCommand( p_vlm, command.c_str(), &message );
- vlm_MessageDelete( message );
- if( strlen(output) > 0 )
- {
- command = "setup \"" + string(name) + "\" output \"" + string(output) + "\"";
- vlm_ExecuteCommand( p_vlm, (char*)command.c_str(), &message );
- vlm_MessageDelete( message );
- }
- if( b_enabled )
- {
- command = "setup \"" + string(name) + "\" enabled";
- vlm_ExecuteCommand( p_vlm, command.c_str(), &message );
- vlm_MessageDelete( message );
- }
-}
-#endif
-
+++ /dev/null
-/*****************************************************************************
- * vlm_wrapper.hpp: Wrapper for VLM
- *****************************************************************************
- * Copyright (C) 1999-2005 the VideoLAN team
- * $Id$
- *
- * Authors: Clément Stenac <zorglub@videolan.org>
- *
- * 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., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
- *****************************************************************************/
-
-/* This is not WX-specific */
-
-#include <vlc_common.h>
-#include <vlc_interface.h>
-#include <vlc_vlm.h>
-#include "dialogs/vlm/vlm_stream.hpp"
-
-#include <vector>
-#include <string>
-using namespace std;
-
-class VLMWrapper
-{
-public:
- VLMWrapper( intf_thread_t * );
- virtual ~VLMWrapper();
-
- bool AttachVLM();
- void LockVLM();
- void UnlockVLM();
-
- void AddBroadcast( const char*, const char*, const char*,
- bool b_enabled = true,
- bool b_loop = true );
- void EditBroadcast( const char*, const char*, const char*,
- bool b_enabled = true,
- bool b_loop = true );
- void AddVod( const char*, const char*, const char*,
- bool b_enabled = true,
- bool b_loop = true );
- void EditVod( const char*, const char*, const char*,
- bool b_enabled = true,
- bool b_loop = true );
-
- unsigned int NbMedia() { if( p_vlm ) return p_vlm->i_media; return 0; }
- vlm_media_t *GetMedia( int i )
- { if( p_vlm ) return p_vlm->media[i]; return NULL; }
-
- vlm_t* GetVLM() { return p_vlm; }
-
-protected:
-
-private:
- vlm_t *p_vlm;
- intf_thread_t *p_intf;
-
-};
+++ /dev/null
-/*****************************************************************************
- * wizard.cpp : wxWindows plugin for vlc
- *****************************************************************************
- * Copyright (C) 2000-2005 the VideoLAN team
- * $Id$
- *
- * Authors: Clément Stenac <zorglub@videolan.org>
- *
- * 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., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
- *****************************************************************************/
-
-/*****************************************************************************
- * Preamble
- *****************************************************************************/
-#include "dialogs/wizard.hpp"
-#include "streamdata.h"
-#include "dialogs/open.hpp"
-
-#include <wx/listctrl.h>
-#include <wx/statline.h>
-#include <vlc_network.h>
-#include <vlc_charset.h>
-
-class wizHelloPage;
-class wizInputPage;
-
-/*****************************************************************************
- * Define events
- *****************************************************************************/
-enum
-{
- ActionRadio0_Event, ActionRadio1_Event,
- MoreInfoStreaming_Event,
- MoreInfoTranscode_Event,
-
- Open_Event , Choose_Event ,
- ListView_Event,
- InputRadio0_Event, InputRadio1_Event,
- PartialEnable_Event,
-
- MethodRadio0_Event, MethodRadio1_Event,
- MethodRadio2_Event, MethodRadio3_Event,
-
- EncapRadio0_Event, EncapRadio1_Event,
- EncapRadio2_Event, EncapRadio3_Event,
- EncapRadio4_Event, EncapRadio5_Event,
- EncapRadio6_Event, EncapRadio7_Event,
- EncapRadio8_Event, EncapRadio9_Event,
- EncapRadio10_Event, EncapRadio11_Event,
-
- VideoEnable_Event, VideoCodec_Event,VideoBitrate_Event,
- AudioEnable_Event, AudioCodec_Event,AudioBitrate_Event,
-
- SAP_Event,
-
-};
-
-#define TEXTWIDTH 55
-#define ACTION_STREAM 0
-#define ACTION_TRANSCODE 1
-
-BEGIN_EVENT_TABLE(WizardDialog, wxWizard)
-END_EVENT_TABLE()
-
-/*****************************************************************************
- * Wizard strings
- *****************************************************************************/
-
-#define ERROR_MSG _("Error")
-#define ITEM_NAME _("Streaming/Transcoding Wizard")
-
-/* Hello page */
-#define HELLO_TITLE _("Streaming/Transcoding Wizard")
-#define HELLO_TEXT _("This wizard helps you to stream, transcode or" \
- " save a stream.")
-#define HELLO_STREAMING _("Stream to network")
-#define HELLO_STREAMING_DESC _("Use this to stream on a network.")
-#define HELLO_TRANSCODE _("Transcode/Save to file")
-#define HELLO_TRANSCODE_DESC _("Use this to re-encode a stream and save it "\
- "to a file.")
-#define HELLO_NOTICE _("This wizard only contains a small subset " \
- "of VLC's streaming and transcoding capabilities. Use the Open "\
- "and Stream Output dialogs to access all of them.")
-
-#define MOREINFO_STREAM _("Use this to stream on a network")
-
-#define MOREINFO_TRANSCODE _("Saves the stream to a file. The stream must " \
- "be a format that VLC recognizes. If desired, the stream can also " \
- "be transcoded to another format.\n\nPlease note that VLC is not very" \
- " suited for file-to-file transcoding. Its transcoding " \
- "features are more appropriate for saving network streams." )
-
-/* Input page */
-#define INPUT_TITLE _("Input")
-#define INPUT_TEXT _("Input stream")
-
-#define INPUT_OPEN _("Select a stream" )
-#define INPUT_PL _( "Existing playlist item" )
-
-#define CHOOSE_STREAM _("You must choose a stream")
-#define NO_PLAYLIST _("Unable to find playlist")
-
-#define PARTIAL _("Use this to read only a part of the stream. " \
- "To use, enter the starting and ending times (in seconds)." \
- "\n\nNote: You must be able to control the incoming stream " \
- "(for example, a file or a disc, but not a RTP/UDP " \
- "network stream).\n" \
-)
-
-#define INPUT_BUTTON _("Choose")
-
-/* Transcode 1 */
-#define TRANSCODE1_TITLE _("Transcode")
-#define TRANSCODE1_TEXT _("Changes the compression format " \
- "of the audio or video tracks. To change only the " \
- "container format, proceed to the next page.")
-
-#define TR_VIDEO_TEXT0 _("Transcode video (if available)" )
-#define TR_VIDEO_TEXT _("Select the target video codec. Choose a codec to " \
- "display more information about it.")
-
-#define TR_AUDIO_TEXT0 _("Transcode audio (if available)"
-#define TR_AUDIO_TEXT _("Select the target audio codec. Choose a codec to " \
- "display more information about it.")
-
-/* Streaming 1 */
-#define STREAMING1_TITLE _("Streaming")
-#define STREAMING1_TEXT _("Determines how the input stream will be sent.")
-
-
-#define INVALID_MCAST_ADDRESS _("This does not appear to be a valid " \
- "multicast address" )
-#define NO_ADDRESS_TEXT _("Please enter an address" )
-
-/* Encap */
-#define ENCAP_TITLE _("Encapsulation format")
-#define ENCAP_TEXT _("Determines how the stream will be encapsulated. " \
- "Depending on the previous choices, some formats " \
- "might not be available." )
-
-
-/* Transcode 2 */
-#define EXTRATRANSCODE_TITLE _("Additional transcode options")
-#define EXTRATRANSCODE_TEXT _("Defines a few additional parameters " \
- "for the transcoding." )
-
-#define CHOOSE_OUTFILE _("You must choose a file to save to")
-
-/* Streaming 2 */
-#define EXTRASTREAMING_TITLE _("Additional streaming options")
-#define EXTRASTREAMING_TEXT _("Defines a few additional parameters " \
- "for the stream." )
-
-#define TTL _("Define the TTL (Time-To-Live) of the stream. This parameter " \
- "is the maximum number of routers your stream can go through. " \
- "If you don't know what it means, or if you want to stream on " \
- "your local network only, leave this setting to 1." )
-
-#define SAP _("When streaming using RTP, you can announce your streams " \
- "using the SAP/SDP announcing protocol. This way, the clients " \
- "won't have to type in the multicast address, it will appear " \
- "in their playlist if they enable the SAP extra interface.\n" \
- "If you want to give a name to your stream, enter it here. " \
- "Otherwise, a default name will be used." )
-
-/*****************************************************************************
- * All the pages of the wizard, declaration
- *****************************************************************************/
-
-/* Declare classes */
-class wizHelloPage : public wxWizardPageSimple
-{
- public:
- wizHelloPage( wxWizard *parent);
- void OnActionChange( wxCommandEvent& event );
- void OnWizardPageChanging(wxWizardEvent& event);
- void OnMoreInfo( wxCommandEvent& event );
- protected:
- int i_action;
- WizardDialog *p_parent;
- wxRadioButton *action_radios[2];
- DECLARE_EVENT_TABLE()
-};
-
-BEGIN_EVENT_TABLE(wizHelloPage, wxWizardPageSimple)
- EVT_RADIOBUTTON( ActionRadio0_Event, wizHelloPage::OnActionChange)
- EVT_RADIOBUTTON( ActionRadio1_Event, wizHelloPage::OnActionChange)
- EVT_BUTTON( MoreInfoStreaming_Event, wizHelloPage::OnMoreInfo )
- EVT_BUTTON( MoreInfoTranscode_Event, wizHelloPage::OnMoreInfo )
-
- EVT_WIZARD_PAGE_CHANGING(-1, wizHelloPage::OnWizardPageChanging)
-END_EVENT_TABLE()
-
-
-class wizInputPage : public wxWizardPage
-{
- public:
- wizInputPage( wxWizard *, wxWizardPage *, intf_thread_t *);
- ~wizInputPage();
- void OnWizardPageChanging(wxWizardEvent& event);
- void OnInputChange( wxCommandEvent& event );
- void OnEnablePartial(wxCommandEvent& event);
- virtual wxWizardPage *GetPrev() const;
- virtual wxWizardPage *GetNext() const;
- void SetStreamingPage( wxWizardPage *page);
- void SetTranscodePage( wxWizardPage *page);
- void SetAction( int i_action );
- void SetPintf( intf_thread_t *p_intf );
- void SetUri( char *psz_uri );
- void SetPartial( int i_from, int i_to );
-
- protected:
- bool b_chosen;
- intf_thread_t *p_intf;
- int i_action;
- int i_input;
-
- void OnChoose( wxCommandEvent& event );
-
- WizardDialog *p_parent;
- wxRadioButton *input_radios[2];
- wxCheckBox *enable_checkbox;
- wxBoxSizer *mainSizer;
- wxArrayString mrl;
- wxTextCtrl *mrl_text;
- wxTextCtrl *from_text;
- wxTextCtrl *to_text;
- OpenDialog *p_open_dialog;
- wxListView *listview;
- wxPanel *open_panel;
- wxPanel *radio_panel; /* radio buttons should be in their own panel... */
- wxWizardPage *p_prev;
- wxWizardPage *p_streaming_page;
- wxWizardPage *p_transcode_page;
-
- DECLARE_EVENT_TABLE()
-};
-
-BEGIN_EVENT_TABLE(wizInputPage, wxWizardPage)
- EVT_RADIOBUTTON( InputRadio0_Event, wizInputPage::OnInputChange)
- EVT_RADIOBUTTON( InputRadio1_Event, wizInputPage::OnInputChange)
- EVT_BUTTON( Choose_Event, wizInputPage::OnChoose)
- EVT_CHECKBOX( PartialEnable_Event, wizInputPage::OnEnablePartial)
- EVT_WIZARD_PAGE_CHANGING(-1, wizInputPage::OnWizardPageChanging)
-END_EVENT_TABLE()
-
-
-class wizTranscodeCodecPage : public wxWizardPage
-{
-public:
- wizTranscodeCodecPage( wxWizard *parent, wxWizardPage *next);
- ~wizTranscodeCodecPage();
- void OnWizardPageChanging(wxWizardEvent& event);
- virtual wxWizardPage *GetPrev() const;
- virtual wxWizardPage *GetNext() const;
- void SetPrev( wxWizardPage *page);
-protected:
- wxCheckBox *video_checkbox;
- wxComboBox *video_combo;
- wxComboBox *vb_combo;
- wxStaticText * video_text;
- wxCheckBox *audio_checkbox;
- wxComboBox *audio_combo;
- wxComboBox *ab_combo;
- wxStaticText * audio_text;
-
- WizardDialog *p_parent;
- int i_audio_codec;
- int i_video_codec;
-
- char *vcodec;
- char *acodec;
-
- wxWizardPage *p_prev;
- wxWizardPage *p_next;
-
- void OnVideoCodecChange(wxCommandEvent& event);
- void OnAudioCodecChange(wxCommandEvent& event);
- void OnEnableVideo(wxCommandEvent& event);
- void OnEnableAudio(wxCommandEvent& event);
-
- DECLARE_EVENT_TABLE()
-};
-
-BEGIN_EVENT_TABLE(wizTranscodeCodecPage, wxWizardPage)
- EVT_CHECKBOX( VideoEnable_Event, wizTranscodeCodecPage::OnEnableVideo)
- EVT_CHECKBOX( AudioEnable_Event, wizTranscodeCodecPage::OnEnableAudio)
- EVT_COMBOBOX( VideoCodec_Event, wizTranscodeCodecPage::OnVideoCodecChange)
- EVT_COMBOBOX( AudioCodec_Event, wizTranscodeCodecPage::OnAudioCodecChange)
- EVT_WIZARD_PAGE_CHANGING(-1, wizTranscodeCodecPage::OnWizardPageChanging)
-END_EVENT_TABLE()
-
-class wizStreamingMethodPage : public wxWizardPage
-{
-public:
- wizStreamingMethodPage( intf_thread_t *p_this, wxWizard *parent,
- wxWizardPage *next) ;
- void OnWizardPageChanging(wxWizardEvent& event);
- virtual wxWizardPage *GetPrev() const;
- virtual wxWizardPage *GetNext() const;
- void SetPrev( wxWizardPage *page);
-protected:
- DECLARE_EVENT_TABLE()
- int i_method;
- wxBoxSizer *mainSizer;
- wxStaticBoxSizer *address_sizer;
- wxStaticText *address_text;
- wxTextCtrl *address_txtctrl;
- WizardDialog * p_parent;
- void OnMethodChange( wxCommandEvent& event );
- wxRadioButton *method_radios[4];
- wxWizardPage *p_prev;
- wxWizardPage *p_next;
- intf_thread_t *p_intf;
-};
-
-BEGIN_EVENT_TABLE(wizStreamingMethodPage, wxWizardPage)
- EVT_RADIOBUTTON( MethodRadio0_Event, wizStreamingMethodPage::OnMethodChange)
- EVT_RADIOBUTTON( MethodRadio1_Event, wizStreamingMethodPage::OnMethodChange)
- EVT_RADIOBUTTON( MethodRadio2_Event, wizStreamingMethodPage::OnMethodChange)
- EVT_RADIOBUTTON( MethodRadio3_Event, wizStreamingMethodPage::OnMethodChange)
- EVT_WIZARD_PAGE_CHANGING(-1, wizStreamingMethodPage::OnWizardPageChanging)
-END_EVENT_TABLE()
-
-
-class wizEncapPage : public wxWizardPage
-{
-public:
- wizEncapPage( wxWizard *parent);
- ~wizEncapPage();
- void OnWizardPageChanging(wxWizardEvent& event);
- virtual wxWizardPage *GetPrev() const;
- virtual wxWizardPage *GetNext() const;
- void SetStreamingPage( wxWizardPage *page);
- void SetTranscodePage( wxWizardPage *page);
- void SetPrev( wxWizardPage *page);
- void SetAction( int );
- void EnableEncap( int encap );
-protected:
- DECLARE_EVENT_TABLE()
- int i_encap;
- int i_mux;
- int i_action;
- void OnEncapChange( wxCommandEvent& event );
- wxRadioButton *encap_radios[MUXERS_NUMBER];
- WizardDialog *p_parent;
- wxWizardPage *p_prev;
- wxWizardPage *p_streaming_page;
- wxWizardPage *p_transcode_page;
-};
-
-BEGIN_EVENT_TABLE(wizEncapPage, wxWizardPage)
- EVT_WIZARD_PAGE_CHANGING(-1, wizEncapPage::OnWizardPageChanging)
- EVT_RADIOBUTTON( EncapRadio0_Event, wizEncapPage::OnEncapChange)
- EVT_RADIOBUTTON( EncapRadio1_Event, wizEncapPage::OnEncapChange)
- EVT_RADIOBUTTON( EncapRadio2_Event, wizEncapPage::OnEncapChange)
- EVT_RADIOBUTTON( EncapRadio3_Event, wizEncapPage::OnEncapChange)
- EVT_RADIOBUTTON( EncapRadio4_Event, wizEncapPage::OnEncapChange)
- EVT_RADIOBUTTON( EncapRadio5_Event, wizEncapPage::OnEncapChange)
- EVT_RADIOBUTTON( EncapRadio6_Event, wizEncapPage::OnEncapChange)
- EVT_RADIOBUTTON( EncapRadio7_Event, wizEncapPage::OnEncapChange)
- EVT_RADIOBUTTON( EncapRadio8_Event, wizEncapPage::OnEncapChange)
- EVT_RADIOBUTTON( EncapRadio9_Event, wizEncapPage::OnEncapChange)
- EVT_RADIOBUTTON( EncapRadio10_Event, wizEncapPage::OnEncapChange)
-END_EVENT_TABLE()
-
-/* Additional settings for transcode */
-class wizTranscodeExtraPage : public wxWizardPage
-{
-public:
- wizTranscodeExtraPage( wxWizard *parent, wxWizardPage *prev,
- wxWizardPage *next);
- virtual wxWizardPage *GetPrev() const;
- virtual wxWizardPage *GetNext() const;
- void OnWizardPageChanging( wxWizardEvent& event );
-protected:
- DECLARE_EVENT_TABLE()
- void OnSelectFile(wxCommandEvent&);
- wxTextCtrl *file_text;
- WizardDialog *p_parent;
- wxWizardPage *p_prev;
- wxWizardPage *p_next;
-};
-
-BEGIN_EVENT_TABLE(wizTranscodeExtraPage, wxWizardPage)
- EVT_BUTTON( Open_Event, wizTranscodeExtraPage::OnSelectFile)
- EVT_WIZARD_PAGE_CHANGING(-1, wizTranscodeExtraPage::OnWizardPageChanging)
-END_EVENT_TABLE()
-
-/* Additional settings for streaming */
-class wizStreamingExtraPage : public wxWizardPage
-{
-public:
- wizStreamingExtraPage( wxWizard *parent, wxWizardPage *prev,
- wxWizardPage *next);
- virtual wxWizardPage *GetPrev() const;
- virtual wxWizardPage *GetNext() const;
- void OnWizardPageChanging(wxWizardEvent&);
- void OnSAP( wxCommandEvent&);
- wxCheckBox *sap_checkbox;
- wxTextCtrl *sap_text;
-protected:
- friend class wizEncapPage;
- DECLARE_EVENT_TABLE()
- WizardDialog *p_parent;
- wxWizardPage *p_prev;
- wxWizardPage *p_next;
-
- wxSpinCtrl *ttl_spin;
-};
-
-BEGIN_EVENT_TABLE(wizStreamingExtraPage, wxWizardPage)
- EVT_CHECKBOX( SAP_Event, wizStreamingExtraPage::OnSAP )
- EVT_WIZARD_PAGE_CHANGING(-1, wizStreamingExtraPage::OnWizardPageChanging)
-END_EVENT_TABLE()
-
-
-/* Local functions */
-static void pageHeader( wxWindow *window, wxBoxSizer *sizer,
- char *psz_title, char *psz_text);
-
-static void pageHeader( wxWindow *window, wxBoxSizer *sizer,
- char *psz_title, char *psz_text)
-{
- wxStaticText *wtitle = new wxStaticText( window, -1, wxU( psz_title ) );
- wxFont font = wtitle->GetFont();
- font.SetPointSize(14);
- wtitle->SetFont(font);
- sizer->Add( wtitle, 0, wxALL, 5 );
- sizer->Add( new wxStaticText( window, -1,
- wxU( vlc_wraptext( psz_text , TEXTWIDTH ) ) ),
- 0, wxALL, 5 );
-}
-
-/***************************************************************************
- * Implementation of the pages
- ***************************************************************************/
-
-
-/***************************************************
- * First page: choose between stream and transcode *
- ***************************************************/
-wizHelloPage::wizHelloPage( wxWizard *parent) : wxWizardPageSimple(parent)
-{
- i_action = 0;
- p_parent = (WizardDialog *)parent;
- wxBoxSizer *mainSizer = new wxBoxSizer(wxVERTICAL);
-
- /* Create the texts */
- pageHeader( this, mainSizer, HELLO_TITLE, HELLO_TEXT );
-
- /* Create the radio buttons with their helps */
- action_radios[0] = new wxRadioButton( this, ActionRadio0_Event,
- wxU( HELLO_STREAMING ) );
- action_radios[1] = new wxRadioButton( this, ActionRadio1_Event,
- wxU( HELLO_TRANSCODE ) );
- i_action = 0;
-
- mainSizer->Add( 0, 0, 1 );
-
- wxBoxSizer *stream_sizer = new wxBoxSizer( wxHORIZONTAL );
- stream_sizer->Add( action_radios[0], 0, wxALL, 5 );
- stream_sizer->Add( 0,0,1 );
- stream_sizer->Add( new wxButton( this, MoreInfoStreaming_Event,
- wxU( _("More Info")) ), 0, 0, 0 );
- mainSizer->Add( stream_sizer, 0, wxALL | wxEXPAND , 5 );
-
- wxBoxSizer *transcode_sizer = new wxBoxSizer( wxHORIZONTAL );
- transcode_sizer->Add( action_radios[1], 0, wxALL, 5 );
- transcode_sizer->Add( 0,0,1);
- transcode_sizer->Add( new wxButton( this, MoreInfoTranscode_Event,
- wxU( _("More Info")) ), 0 , 0 , 0 );
- mainSizer->Add( transcode_sizer, 0, wxALL | wxEXPAND, 5 );
-
- mainSizer->Add( 0, 0, 1 );
-
- mainSizer->Add( new wxStaticLine(this, -1 ), 0, wxEXPAND| wxTOP|
- wxBOTTOM, 5 );
-
- mainSizer->Add( new wxStaticText(this, -1,
- wxU( vlc_wraptext(HELLO_NOTICE , TEXTWIDTH ))),
- 0, wxALL, 5 );
-
- SetSizer(mainSizer);
- mainSizer->Fit(this);
- }
-
-void wizHelloPage::OnMoreInfo(wxCommandEvent& event)
-{
- wxString msg;
- msg.Printf( wxString( wxU( event.GetId() == MoreInfoStreaming_Event ?
- MOREINFO_STREAM :
- MOREINFO_TRANSCODE ) ) );
- wxMessageBox( msg, wxU(_("More information")),
- wxOK | wxICON_INFORMATION, this->p_parent );
-}
-
-void wizHelloPage::OnActionChange( wxCommandEvent& event )
-{
- i_action = event.GetId() - ActionRadio0_Event;
- ((wizInputPage *)GetNext())->SetAction( i_action );
- p_parent->SetAction( i_action );
-}
-
-void wizHelloPage::OnWizardPageChanging(wxWizardEvent& event)
-{
- ((wizInputPage *)GetNext())->SetAction( i_action );
- p_parent->SetAction( i_action );
-}
-
-/************************************
- * Second page: choose input stream *
- ************************************/
-wizInputPage::wizInputPage( wxWizard *parent, wxWizardPage *prev, intf_thread_t *_p_intf) :
- wxWizardPage(parent)
-{
- p_prev = prev;
- p_intf = _p_intf;
- p_parent = (WizardDialog *)parent;
- b_chosen = false;
- p_open_dialog = NULL;
- listview = NULL;
- mrl_text = NULL;
- mainSizer = new wxBoxSizer(wxVERTICAL);
-
- /* Create the texts */
- pageHeader( this, mainSizer, INPUT_TITLE, INPUT_TEXT );
-
- mainSizer->Add( 0,20,0 );
-
- radio_panel = new wxPanel(this, -1);
- radio_panel->SetAutoLayout( TRUE );
-
- wxBoxSizer *radioSizer = new wxBoxSizer(wxVERTICAL);
-
- /* Create the radio buttons */
- input_radios[0] = new wxRadioButton( radio_panel, InputRadio0_Event ,
- wxU( INPUT_OPEN ) );
- radioSizer->Add( input_radios[0], 0, wxALL, 5 );
- input_radios[1] = new wxRadioButton( radio_panel, InputRadio1_Event ,
- wxU( INPUT_PL ) );
- radioSizer->Add( input_radios[1], 0, wxALL, 5 );
-
- radio_panel->SetSizer( radioSizer );
- radioSizer->Layout();
- radioSizer->Fit(radio_panel);
- mainSizer->Add( radio_panel );
-
- i_input = 0;
-
- /* Open Panel */
- open_panel = new wxPanel(this, -1);
- open_panel->SetAutoLayout( TRUE );
-
- wxBoxSizer *openSizer = new wxBoxSizer(wxHORIZONTAL);
-
- mrl_text = new wxTextCtrl( open_panel, -1, wxU( "" ), wxDefaultPosition,
- wxSize(200,25) );
-
- openSizer->Add( mrl_text, 0 , wxALL, 5 );
- openSizer->Add( new wxButton( open_panel, Choose_Event, wxU(_("Choose...")) ), 0, wxALL, 5 );
-
- open_panel->SetSizer( openSizer );
- openSizer->Layout();
- openSizer->Fit(open_panel);
- mainSizer->Add( open_panel );
-
- playlist_t *p_playlist = pl_Hold( p_intf );
- if( p_playlist )
- {
- if( !playlist_IsEmpty( p_playlist ) )
- {
- listview = new wxListView( this, ListView_Event,
- wxDefaultPosition, wxDefaultSize,
- wxLC_REPORT | wxSUNKEN_BORDER );
- listview->InsertColumn( 0, wxU(_("Name")) );
- listview->InsertColumn( 1, wxU(_("URI")) );
- listview->SetColumnWidth( 0, 250 );
- listview->SetColumnWidth( 1, 100 );
- mainSizer->Add( listview, 1, wxALL|wxEXPAND, 5 );
-
- listview->Hide();
- mainSizer->Hide( listview );
- mainSizer->Layout();
- }
- else
- {
- input_radios[1]->Disable();
- }
- pl_Release( p_intf );
- }
- else
- {
- input_radios[1]->Disable();
- }
-
- /* Partial Extract Box */
- mainSizer->Add( 0, 10, 0 );
- wxStaticBox *partial_box = new wxStaticBox( this, -1,
- wxU(_("Partial Extract")) );
-
- wxStaticBoxSizer *partial_sizer = new wxStaticBoxSizer( partial_box,
- wxVERTICAL );
-
- enable_checkbox = new wxCheckBox( this, PartialEnable_Event,
- wxU(_("Enable") ) );
- enable_checkbox->SetToolTip(wxU(_(PARTIAL) ) ) ;
- partial_sizer->Add( enable_checkbox, 0 , wxALIGN_CENTER_VERTICAL|wxALL, 5 ); //wxLEFT
-
- wxFlexGridSizer *partial_sizer2 = new wxFlexGridSizer( 4 , 1 , 20 );
- partial_sizer2->Add( new wxStaticText(this, -1, wxU(_( "From" ) ) ),
- 0 , wxLEFT , 5 );
- from_text = new wxTextCtrl( this, -1, wxT(""),
- wxDefaultPosition, wxSize( 80,25 ) );
- partial_sizer2->Add( from_text, 0 , wxALIGN_RIGHT);
- partial_sizer2->Add( new wxStaticText(this, -1, wxU(_( "To" ) ) ),
- 0 , wxLEFT , 5 );
- to_text = new wxTextCtrl( this, -1, wxT(""),
- wxDefaultPosition, wxSize( 80 , 25 ) );
- partial_sizer2->Add( to_text, 0 , wxALIGN_RIGHT );
-
- partial_sizer->Add( partial_sizer2, 0, wxALL, 0 );
-
- partial_sizer->Fit( partial_box );
-
- mainSizer->Add( partial_sizer, 0, 0, 0 );
-
- from_text->Disable();
- to_text->Disable();
- SetSizer(mainSizer);
- mainSizer->Fit(this);
- mainSizer->Layout();
-}
-
-wizInputPage::~wizInputPage()
-{
-}
-
-void wizInputPage::OnInputChange( wxCommandEvent& event )
-{
- i_input = event.GetId() - InputRadio0_Event;
- if( i_input == 0 )
- {
- if( listview )
- {
- listview->Hide();
- mainSizer->Hide( listview );
- open_panel->Show();
- mainSizer->Show( open_panel );
- mainSizer->Layout();
- }
- }
- else
- {
- open_panel->Hide();
- mainSizer->Hide( open_panel );
- listview->Show();
- mainSizer->Show( listview );
- mainSizer->Layout();
- }
-}
-
-void wizInputPage::OnEnablePartial(wxCommandEvent& event)
-{
- from_text->Enable( event.IsChecked() );
- to_text->Enable( event.IsChecked() );
-}
-
-
-void wizInputPage::OnChoose(wxCommandEvent& event)
-{
- p_open_dialog = new OpenDialog( p_intf, this, -1, -1, OPEN_STREAM );
- if( p_open_dialog->ShowModal() == wxID_OK &&
- !p_open_dialog->mrl.IsEmpty() )
- {
- mrl_text->SetValue(p_open_dialog->mrl[0] );
- }
- delete p_open_dialog;
- p_open_dialog = NULL;
-}
-
-void wizInputPage::OnWizardPageChanging(wxWizardEvent& event)
-{
- if( i_input == 0)
- {
- if( mrl_text->GetValue().IsSameAs( wxT(""), TRUE ) &&
- event.GetDirection() )
- {
- wxMessageBox( wxU( CHOOSE_STREAM ), wxU( ERROR_MSG ),
- wxICON_WARNING | wxOK, this->p_parent );
- event.Veto();
- return;
- }
- else
- {
- p_parent->SetMrl( (const char *)mrl_text->GetValue().mb_str(wxConvUTF8) );
- }
- }
- else
- {
- int i = -1;
- i = listview->GetNextItem( i , wxLIST_NEXT_ALL, wxLIST_STATE_SELECTED);
- if( i != -1 )
- {
- long data = listview->GetItemData( i );
- playlist_t *p_playlist = pl_Hold( p_intf );
- if( p_playlist )
- {
- playlist_item_t * p_item = playlist_ItemGetById( p_playlist, (int)data, false );
- if( p_item )
- {
- const char *psz_uri = input_item_GetURI( p_item->p_input );
- p_parent->SetMrl( psz_uri );
- free( psz_uri );
- }
- else
- event.Veto();
- pl_Release( p_intf );
- }
- else
- event.Veto();
- }
- }
- if( enable_checkbox->IsChecked() )
- {
- int i_from = atoi( from_text->GetValue().mb_str(wxConvUTF8) );
- int i_to = atoi( to_text->GetValue().mb_str(wxConvUTF8) );
- p_parent->SetPartial( i_from, i_to );
- }
- return;
-}
-
-wxWizardPage *wizInputPage::GetPrev() const { return p_prev; }
-wxWizardPage *wizInputPage::GetNext() const
-{
- if( i_action == ACTION_STREAM )
- return p_streaming_page;
- else
- return p_transcode_page;
-}
-
-void wizInputPage::SetStreamingPage( wxWizardPage *page)
-{
- p_streaming_page = page;
-}
-
-void wizInputPage::SetTranscodePage( wxWizardPage *page)
-{
- p_transcode_page = page;
-}
-
-void wizInputPage::SetAction( int i_action )
-{
- this->i_action = i_action;
-}
-
-void wizInputPage::SetPintf( intf_thread_t *p_intf )
-{
- this->p_intf = p_intf;
-}
-
-void wizInputPage::SetUri( char *psz_uri )
-{
- mrl_text->SetValue( wxU( psz_uri ) );
-}
-
-void wizInputPage::SetPartial( int i_from, int i_to )
-{
- wxString msg;
- msg.Printf( wxString( wxT( "%i") ), i_from );
- from_text->Enable( TRUE );
- from_text->SetValue( msg );
- msg.Printf( wxString( wxT( "%i") ), i_to );
- to_text->Enable( TRUE );
- to_text->SetValue( msg );
- enable_checkbox->SetValue( TRUE );
-}
-
-/***************************************************
- * First transcode page: choose codecs *
- ***************************************************/
-wizTranscodeCodecPage::wizTranscodeCodecPage( wxWizard *parent,
- wxWizardPage *next) : wxWizardPage(parent)
-{
- int i;
-
- p_next = next;
-
- acodec = NULL;
- vcodec = NULL;
- p_parent = (WizardDialog *) parent;
-
- wxBoxSizer *main_sizer = new wxBoxSizer(wxVERTICAL);
-
- /* Header */
- pageHeader( this, main_sizer, TRANSCODE1_TITLE, TRANSCODE1_TEXT );
-
- /* Video Box */
- wxStaticBox *video_box = new wxStaticBox( this, -1, wxU(_("Video")) );
- wxStaticBoxSizer *video_sizer = new wxStaticBoxSizer( video_box,
- wxVERTICAL );
- /* Line 1 : only the checkbox */
- wxFlexGridSizer *video_sizer1 = new wxFlexGridSizer( 2,3,20 );
- video_sizer1->Add( new wxCheckBox( this, VideoEnable_Event,
- wxU(_("Transcode video") ) ), 0 , wxALIGN_CENTER_VERTICAL|wxALL , 5 );
- video_sizer1->Add( 0,0,1);
- /* Line 2 : codec */
- video_sizer1->Add( new wxStaticText(this, -1, wxU(_("Codec"))),0,wxLEFT ,5);
- video_combo = new wxComboBox( this, VideoCodec_Event, wxT(""),
- wxDefaultPosition, wxSize(200,25), 0, NULL,
- wxCB_DROPDOWN| wxCB_READONLY );
- for( i= 0; vcodecs_array[i].psz_display != NULL; i++ )
- {
- video_combo->Append( wxU( vcodecs_array[i].psz_display ) ,
- (void *)&vcodecs_array[i] );
- }
- i_video_codec = 0;
- video_combo->SetSelection(0);
-
- video_sizer1->Add( video_combo, 0 , wxALIGN_LEFT , 0 );
-
- video_sizer1->Add( new wxStaticText(this, -1, wxU(_("Bitrate (kb/s)"))),0,
- wxLEFT ,5);
- vb_combo = new wxComboBox( this, VideoBitrate_Event, wxT("1024"),
- wxDefaultPosition, wxDefaultSize,
- WXSIZEOF(vbitrates_array), vbitrates_array, wxCB_READONLY );
- video_sizer1->Add( vb_combo, 0, wxALIGN_LEFT , 0 );
-
- /* Line 3 : text */
- video_text = new wxStaticText( this, -1,
- wxU( vlc_wraptext( TR_VIDEO_TEXT, TEXTWIDTH ) ) );
- /* Fill the main video sizer */
- video_sizer->Add( video_sizer1 , 0, wxEXPAND , 5 );
- video_sizer->Add( video_text, 0, wxLEFT|wxTOP , 5 );
-
-
- /* Audio box */
- wxStaticBox *audio_box = new wxStaticBox( this, -1, wxU(_("Audio")) );
- wxStaticBoxSizer *audio_sizer = new wxStaticBoxSizer( audio_box,
- wxVERTICAL );
- /* Line1: enabler */
- wxFlexGridSizer *audio_sizer1 = new wxFlexGridSizer( 2,3,20);
- audio_sizer1->Add( new wxCheckBox( this, AudioEnable_Event,
- wxU(_("Transcode audio") ) ), 0 , wxALIGN_CENTER_VERTICAL|wxALL, 5 );
- audio_sizer1->Add( 0, 0, 1 );
-
- /* Line 2 : codec */
- audio_sizer1->Add( new wxStaticText(this, -1, wxU(_("Codec"))),0,wxLEFT,5);
- audio_combo = new wxComboBox( this, AudioCodec_Event, wxT(""),
- wxDefaultPosition, wxSize(200,25), 0, NULL,
- wxCB_DROPDOWN| wxCB_READONLY );
- for( i= 0; acodecs_array[i].psz_display != NULL; i++ )
- {
- audio_combo->Append( wxU( acodecs_array[i].psz_display ) ,
- (void *)&acodecs_array[i] );
- }
- i_audio_codec = 0;
- audio_combo->SetSelection(0);
- audio_sizer1->Add( audio_combo, 0 , wxALIGN_LEFT, 0 );
-
- audio_sizer1->Add( new wxStaticText(this, -1, wxU(_("Bitrate (kb/s)"))),0,
- wxLEFT ,5);
- ab_combo = new wxComboBox( this, AudioBitrate_Event, wxT("192"),
- wxDefaultPosition, wxDefaultSize,
- WXSIZEOF(abitrates_array), abitrates_array, wxCB_READONLY );
- audio_sizer1->Add( ab_combo, 0, wxALIGN_LEFT, 0 );
-
- /* Line 3 : text */
- audio_text = new wxStaticText( this, -1,
- wxU( vlc_wraptext( TR_AUDIO_TEXT, TEXTWIDTH ) ) );
-
- audio_sizer->Add(audio_sizer1, 0, wxEXPAND, 5);
- audio_sizer->Add( audio_text, 0, wxLEFT | wxTOP, 5 );
-
- main_sizer->Add( video_sizer, 1, wxGROW, 0 );
- main_sizer->Add( audio_sizer, 1, wxGROW, 0 );
- main_sizer->Layout();
- SetSizerAndFit( main_sizer );
-
- /* Default disabled */
- video_combo->Disable(); video_text->Disable();vb_combo->Disable();
- audio_combo->Disable(); audio_text->Disable();ab_combo->Disable();
-
-}
-
-wizTranscodeCodecPage::~wizTranscodeCodecPage()
-{
- free( acodec );
- free( vcodec );
-}
-
-void wizTranscodeCodecPage::OnEnableVideo(wxCommandEvent& event)
-{
- video_combo->Enable( event.IsChecked() );
- vb_combo->Enable( event.IsChecked() );
- video_text->Enable( event.IsChecked() );
-}
-
-void wizTranscodeCodecPage::OnEnableAudio(wxCommandEvent& event)
-{
- audio_combo->Enable( event.IsChecked() );
- ab_combo->Enable( event.IsChecked() );
- audio_text->Enable( event.IsChecked() );
-}
-
-void wizTranscodeCodecPage::OnVideoCodecChange(wxCommandEvent& event)
-{
- struct codec *c = (struct codec*)
- (video_combo->GetClientData(video_combo->GetSelection()));
- video_text->SetLabel( wxU( vlc_wraptext(c->psz_descr, TEXTWIDTH ) ) );
- i_video_codec = video_combo->GetSelection();
- vcodec = strdup(c->psz_codec);
-}
-
-void wizTranscodeCodecPage::OnAudioCodecChange(wxCommandEvent& event)
-{
- struct codec *c = (struct codec*)
- (audio_combo->GetClientData(audio_combo->GetSelection()));
- audio_text->SetLabel( wxU( vlc_wraptext(c->psz_descr, TEXTWIDTH ) ) );
- i_audio_codec = audio_combo->GetSelection();
- acodec = strdup(c->psz_codec);
-
-}
-
-void wizTranscodeCodecPage::OnWizardPageChanging(wxWizardEvent& event)
-{
- unsigned int i,j;
-
- if( !event.GetDirection() )
- {
- GetPrev()->Enable();
- return;
- }
-
- /* Set the dummy codec ( accept all muxers ) if needed */
- if( !video_combo->IsEnabled() )
- {
- i_video_codec = VCODECS_NUMBER;
- }
- if( !audio_combo->IsEnabled() )
- {
- i_audio_codec = ACODECS_NUMBER;
- }
-
- ((wizEncapPage *)GetNext())->SetPrev(this);
-
- for( i = 0 ; i< MUXERS_NUMBER ; i++ )
- {
- if( vcodecs_array[i_video_codec].muxers[i] != -1 )
- {
- for( j = 0 ; j< MUXERS_NUMBER ; j++ )
- {
- if( acodecs_array[i_audio_codec].muxers[j] ==
- vcodecs_array[i_video_codec].muxers[i] )
- {
- ((wizEncapPage*)GetNext())->EnableEncap(
- vcodecs_array[i_video_codec].muxers[i] );
- }
- }
- }
- }
- struct codec *c = (struct codec*)
- (video_combo->GetClientData( video_combo->IsEnabled() ?
- video_combo->GetSelection(): i_video_codec ));
- vcodec = strdup(c->psz_codec);
- c = (struct codec*)
- (audio_combo->GetClientData( audio_combo->IsEnabled() ?
- audio_combo->GetSelection() : i_audio_codec ));
- acodec = strdup(c->psz_codec);
-
- int vb = atoi(vb_combo->GetValue().mb_str(wxConvUTF8) );
- if( vb == 0 )
- {
- vb = 1024;
- }
- int ab = atoi(ab_combo->GetValue().mb_str(wxConvUTF8) );
- if( ab == 0)
- {
- ab = 192;
- }
-
- p_parent->SetTranscode( vcodec, vb , acodec, ab );
- ((wizEncapPage*)GetNext())->SetAction( p_parent->GetAction() );
- p_parent->SetAction( p_parent->GetAction() );
-
- return;
-}
-
-wxWizardPage *wizTranscodeCodecPage::GetPrev() const { return p_prev; }
-wxWizardPage *wizTranscodeCodecPage::GetNext() const { return p_next; }
-void wizTranscodeCodecPage::SetPrev( wxWizardPage *page) {p_prev = page; }
-
-
-/***************************************************
- * First streaming page: choose method *
- ***************************************************/
-wizStreamingMethodPage::wizStreamingMethodPage( intf_thread_t *p_this, wxWizard *parent,
- wxWizardPage *next) : wxWizardPage(parent), p_intf( p_this )
-{
- int i;
- p_next = next;
- p_parent = (WizardDialog *)parent;
-
- mainSizer = new wxBoxSizer(wxVERTICAL);
-
- /* Create the texts */
- pageHeader( this, mainSizer, STREAMING1_TITLE, STREAMING1_TEXT );
-
- mainSizer->Add( 0,50,0 );
-
- i_method = 0;
-
- wxStaticBox *method_box = new wxStaticBox( this, -1,
- wxU(_("Streaming method")) );
- wxStaticBoxSizer *method_sizer = new wxStaticBoxSizer(method_box,
- wxHORIZONTAL );
- for( i = 0 ; i< 3 ; i++ )
- {
- method_radios[i] = new wxRadioButton( this, MethodRadio0_Event + i,
- wxU( methods_array[i].psz_method ) );
- method_radios[i]->SetToolTip( wxU(_( methods_array[i].psz_descr ) ) );
- method_sizer->Add( method_radios[i], 0, wxALL, 5 );
- }
-
- method_sizer->Layout();
-
- wxStaticBox *address_box = new wxStaticBox( this, -1,
- wxU(_("Destination")) );
-
- address_sizer = new wxStaticBoxSizer(address_box,
- wxVERTICAL );
-
- /* Big kludge, we take the longest text to get the size */
- address_text = new wxStaticText(this, -1,
- wxU( vlc_wraptext(methods_array[2].psz_address, TEXTWIDTH ) ),
- wxDefaultPosition, wxDefaultSize );
-
- address_txtctrl = new wxTextCtrl( this, -1, wxU(""), wxDefaultPosition,
- wxSize(200,25));
- address_sizer->Add( address_text, 0, wxALL, 5 );
- address_sizer->Add( address_txtctrl, 0, wxALL, 5 );
- address_sizer->Layout();
-
- /* Set the minimum size */
- address_sizer->SetMinSize( address_sizer->GetSize() );
- address_text->SetLabel( wxU(
- vlc_wraptext( _(methods_array[0].psz_address), TEXTWIDTH )));
-
- mainSizer->Add( method_sizer, 0, wxALL | wxEXPAND, 5 );
- mainSizer->Add( address_sizer, 0, wxALL | wxEXPAND, 5 );
-
- mainSizer->Add( 0,0,1 );
-
- mainSizer->Layout();
-
- SetSizer(mainSizer);
- mainSizer->Fit(this);
-
- return;
-}
-
-void wizStreamingMethodPage::OnWizardPageChanging(wxWizardEvent& event)
-{
- unsigned int i;
- if( !event.GetDirection() ) return;
-
- /* Check valid address */
- if( i_method == 0 && address_txtctrl->GetValue().IsEmpty() )
- {
- wxMessageBox( wxU( NO_ADDRESS_TEXT ) , wxU( ERROR_MSG ),
- wxICON_WARNING | wxOK, this->p_parent );
- event.Veto();
-
- }
-
- ((wizEncapPage *)GetNext())->SetPrev(this);
- for( i = 0 ; i< MUXERS_NUMBER ; i++ )
- {
- if( methods_array[i_method].muxers[i] != -1 )
- {
- ((wizEncapPage*)GetNext())->EnableEncap(
- methods_array[i_method].muxers[i] );
- }
- }
- p_parent->SetStream( methods_array[i_method].psz_access ,
- address_txtctrl->GetValue().mb_str(wxConvUTF8) );
-
- /* Set the action for the muxer page */
- ((wizEncapPage*)GetNext())->SetAction( p_parent->GetAction() );
- return;
-}
-
-wxWizardPage *wizStreamingMethodPage::GetPrev() const { return p_prev; }
-wxWizardPage *wizStreamingMethodPage::GetNext() const { return p_next; }
-
-void wizStreamingMethodPage::SetPrev( wxWizardPage *page) {p_prev = page; }
-
-
-void wizStreamingMethodPage::OnMethodChange( wxCommandEvent& event )
-{
- i_method = event.GetId() - MethodRadio0_Event;
- address_text->SetLabel( wxU(
- vlc_wraptext( _(methods_array[i_method].psz_address), TEXTWIDTH )));
- address_sizer->Layout();
- mainSizer->Layout();
-}
-
-/***************************************************
- * Choose encapsulation format *
- ***************************************************/
-wizEncapPage::wizEncapPage( wxWizard *parent ) : wxWizardPage(parent)
-{
- int i;
- i_mux = 0;
- p_parent = (WizardDialog *)parent;
- p_streaming_page = NULL;
- p_transcode_page = NULL;
- p_prev = NULL;
- wxBoxSizer *mainSizer = new wxBoxSizer(wxVERTICAL);
-
- /* Create the texts */
- pageHeader( this, mainSizer, ENCAP_TITLE, ENCAP_TEXT );
-
- mainSizer->Add( 0,0,1 );
-
- for( i = 0 ; i< MUXERS_NUMBER ; i++ )
- {
- encap_radios[i] = new wxRadioButton( this, EncapRadio0_Event + i,
- wxU( encaps_array[i].psz_encap ) );
- encap_radios[i]->SetToolTip( wxU(_( encaps_array[i].psz_descr ) ) );
- mainSizer->Add( encap_radios[i], 0, wxLEFT, 5 );
- encap_radios[i]->Disable();
- }
-
- mainSizer->Add( 0,0,1 );
-
- SetSizer(mainSizer);
- mainSizer->Fit(this);
-}
-
-wizEncapPage::~wizEncapPage()
-{
-}
-
-void wizEncapPage::OnWizardPageChanging(wxWizardEvent& event)
-{
- int i;
- if( !event.GetDirection() )
- {
- for( i = 0 ; i< MUXERS_NUMBER ; i++ )
- {
- encap_radios[i]->Disable();
- }
- }
- p_parent->SetMux( encaps_array[i_mux].psz_mux );
-
- if( p_parent->GetAction() == ACTION_STREAM )
- {
- if( strstr( p_parent->method, "rtp" ))
- {
- ((wizStreamingExtraPage *)GetNext())->sap_checkbox->Enable();
- ((wizStreamingExtraPage *)GetNext())->sap_text->Enable(false);
- }
- else
- {
- ((wizStreamingExtraPage *)GetNext())->sap_checkbox->Enable( false );
- ((wizStreamingExtraPage *)GetNext())->sap_text->Enable( false );
- }
- }
-
- return;
-}
-
-
-void wizEncapPage::OnEncapChange( wxCommandEvent& event )
-{
- i_mux = event.GetId() - EncapRadio0_Event;
-}
-
-void wizEncapPage::EnableEncap( int encap )
-{
- int i;
- for( i = 0 ; i< MUXERS_NUMBER ; i++)
- {
- if( encaps_array[i].id == encap )
- {
- encap_radios[i]->Enable();
- encap_radios[i]->SetValue(true);
- i_mux = i;
- }
- }
-}
-
-void wizEncapPage::SetStreamingPage( wxWizardPage *page)
-{
- p_streaming_page = page;
-}
-
-void wizEncapPage::SetTranscodePage( wxWizardPage *page)
-{
- p_transcode_page = page;
-}
-
-wxWizardPage *wizEncapPage::GetPrev() const { return p_prev; }
-
-wxWizardPage *wizEncapPage::GetNext() const
-{
- if( i_action== ACTION_STREAM )
- return p_streaming_page;
- else
- return p_transcode_page;
-}
-
-void wizEncapPage::SetAction( int i_act ) { i_action = i_act; }
-
-void wizEncapPage::SetPrev( wxWizardPage *page) { p_prev = page; }
-
-/***************************************************
- * Extra transcoding page : Select file *
- ***************************************************/
-wizTranscodeExtraPage::wizTranscodeExtraPage( wxWizard *parent,
- wxWizardPage *prev,
- wxWizardPage *next) : wxWizardPage(parent)
-{
- p_next = next;
- p_prev = prev;
- p_parent = (WizardDialog *) parent;
- wxBoxSizer *mainSizer = new wxBoxSizer(wxVERTICAL);
-
- /* Create the texts */
- pageHeader( this, mainSizer, EXTRATRANSCODE_TITLE, EXTRATRANSCODE_TEXT );
-
- mainSizer->Add( 0, 0, 1 );
-
- wxFlexGridSizer *sizer = new wxFlexGridSizer( 2, 2, 1 );
- sizer->Add( new wxStaticText( this, -1,
- wxU(_("Select the file to save to") ) ),
- 0, wxALL, 5 );
- sizer->Add( 0, 0, 1 );
-
- file_text = new wxTextCtrl( this, -1, wxU(""), wxDefaultPosition,
- wxSize( 150, -1 ) );
-
- sizer->Add( file_text, 0, wxALL, 5 );
- sizer->Add( new wxButton( this, Open_Event, wxU("Choose") ) );
-
- mainSizer->Add( sizer, 0, 0, 0) ;
-
- mainSizer->Add( 0, 0, 1 );
- SetSizer(mainSizer);
- mainSizer->Fit(this);
-}
-
-void wizTranscodeExtraPage::OnSelectFile( wxCommandEvent &event)
-{
- wxFileDialog *file_dialog = new wxFileDialog( this, wxU(_("Save to file")),
- wxT(""), wxT(""), wxT("*"), wxSAVE );
-
- if( file_dialog && file_dialog->ShowModal() == wxID_OK )
- {
- if( file_dialog->GetFilename().mb_str(wxConvUTF8) )
- {
- file_text->SetValue( file_dialog->GetPath() );
- }
- }
-}
-
-void wizTranscodeExtraPage::OnWizardPageChanging( wxWizardEvent& event )
-{
- if( event.GetDirection() && file_text->GetValue().IsEmpty() )
- {
- wxMessageBox( wxU( CHOOSE_OUTFILE ), wxU( ERROR_MSG ),
- wxICON_WARNING | wxOK, this->p_parent );
- event.Veto();
- }
- if( event.GetDirection() )
- {
- p_parent->SetTranscodeOut( file_text->GetValue() );
- }
-}
-
-wxWizardPage *wizTranscodeExtraPage::GetPrev() const { return p_prev; }
-wxWizardPage *wizTranscodeExtraPage::GetNext() const {return p_next; }
-
-/***********************************************************
- * Extra streaming page
- ***********************************************************/
-wizStreamingExtraPage::wizStreamingExtraPage( wxWizard *parent,
- wxWizardPage *prev,
- wxWizardPage *next) : wxWizardPage(parent)
-{
- p_next = next;
- p_prev = prev;
- p_parent = (WizardDialog *) parent;
- wxBoxSizer *mainSizer = new wxBoxSizer(wxVERTICAL);
-
- /* Create the texts */
- pageHeader( this, mainSizer, EXTRASTREAMING_TITLE, EXTRASTREAMING_TEXT );
-
- mainSizer->Add( 0, 0, 1 );
-
- wxFlexGridSizer *sizer = new wxFlexGridSizer( 2,2,1) ;
-
- /* TTL */
- sizer->Add( new wxStaticText( this, -1, wxU(_("Time-To-Live (TTL)"))),
- 0, wxALL, 5 );
- ttl_spin = new wxSpinCtrl( this, -1, wxEmptyString, wxDefaultPosition, wxDefaultSize,
- 0, 1, 255, 1 );
- ttl_spin->SetToolTip(wxU(_(TTL) ) ) ;
- sizer->Add( ttl_spin, 0, wxALL , 5 );
-
- /* SAP announce */
- sap_checkbox = new wxCheckBox( this, SAP_Event, wxU(_("SAP Announce")) );
- sap_checkbox->SetToolTip( wxU(_( SAP ) ) );
- sizer->Add( sap_checkbox, 0, 0 , 0 );
- sap_text = new wxTextCtrl( this, -1, wxU(""), wxDefaultPosition,
- wxSize(100,25) );
- sap_text->SetToolTip( wxU(_( SAP ) ) );
- sizer->Add( sap_text, 0, wxALL , 5 );
-
- mainSizer->Add(sizer, 0, wxALL, 5 );
-
- mainSizer->Add( 0, 0, 1 );
-
- SetSizer(mainSizer);
- mainSizer->Fit(this);
-}
-
-void wizStreamingExtraPage::OnSAP( wxCommandEvent &event )
-{
- sap_text->Enable( event.IsChecked() );
-}
-
-void wizStreamingExtraPage::OnWizardPageChanging(wxWizardEvent& event)
-{
- if( sap_checkbox->IsChecked() )
- {
- if( sap_text->GetValue().IsEmpty() )
- {
- p_parent->SetSAP( true, NULL );
- }
- else
- {
- p_parent->SetSAP( true,
- (const char *)sap_text->GetValue().mb_str(wxConvUTF8) );
- }
- }
- else
- {
- p_parent->SetSAP( false, NULL );
- }
-
- p_parent->SetTTL( ttl_spin->GetValue() );
-}
-
-wxWizardPage *wizStreamingExtraPage::GetPrev() const { return p_prev; }
-wxWizardPage *wizStreamingExtraPage::GetNext() const {return p_next; }
-
-
-/***************************************************************************
- * Implementation of the wizard itself
- ***************************************************************************/
-wizHelloPage *page1;
-wizInputPage *page2 ;
-wizTranscodeCodecPage *tr_page1 ;
-wizStreamingMethodPage *st_page1;
-wizTranscodeExtraPage *tr_page2 ;
-wizStreamingExtraPage *st_page2;
-wizEncapPage *encap_page;
-
-WizardDialog::WizardDialog(intf_thread_t *_p_intf, wxWindow *_p_parent,
- char *psz_uri, int _i_from, int _i_to ) :
-wxWizard( _p_parent, -1, wxU(_("Streaming/Transcoding Wizard")), wxNullBitmap, wxDefaultPosition)
-{
- /* Initializations */
- p_intf = _p_intf;
- SetPageSize(wxSize(400,420));
-
- /* Initialize structure */
- i_action = 0;
- i_from = _i_from;
- i_to = _i_to;
- i_ttl = 1;
- vb = 0;
- ab = 0;
- acodec=NULL;
- vcodec=NULL;
-
- page1 = new wizHelloPage(this);
- page2 = new wizInputPage(this, page1, p_intf);
-
- if( psz_uri )
- {
- page2->SetUri( psz_uri );
- }
- if( i_from != 0 || i_to != 0 )
- {
- page2->SetPartial( i_from, i_to );
- }
-
- encap_page = new wizEncapPage(this );
- tr_page1 = new wizTranscodeCodecPage(this, encap_page );
- st_page1 = new wizStreamingMethodPage( p_intf, this, encap_page);
-
- tr_page2 = new wizTranscodeExtraPage(this, encap_page, NULL );
- st_page2 = new wizStreamingExtraPage(this, encap_page, NULL );
-
- /* Page 1 -> 2 */
- page1->SetNext( page2 );
- /* 2->1 in constructor of 2 */
-
- /* Page 2 -> 3 */
- page2->SetTranscodePage(tr_page1);
- page2->SetStreamingPage(st_page1);
- page2->SetPintf( p_intf );
- tr_page1->SetPrev(page2);
- st_page1->SetPrev(page2);
-
- /* Page 3 -> 4 */
- encap_page->SetTranscodePage( tr_page2 );
- encap_page->SetStreamingPage( st_page2 );
- /* 3->4 in constructor of 3 */
-// encap_page->SetPrev(tr_page1);
-}
-
-WizardDialog::~WizardDialog()
-{
- Destroy();
- delete page1;
- delete page2;
- delete tr_page1;
- delete st_page1 ;
- delete st_page2;
- delete tr_page2;
- delete encap_page;
-}
-
-void WizardDialog::SetMrl( const char *mrl )
-{
- this->mrl = strdup( mrl );
-}
-
-void WizardDialog::SetTTL( int i_ttl )
-{
- this->i_ttl = i_ttl;
-}
-
-void WizardDialog::SetSAP( bool b_enabled, const char *psz_text )
-{
- this->b_sap = b_enabled;
- if( b_enabled )
- {
- if( psz_text != NULL )
- {
- this->psz_sap_name = strdup( psz_text );
- }
- else
- {
- this->psz_sap_name = NULL;
- }
- }
-}
-
-void WizardDialog::SetPartial( int i_from, int i_to )
-{
- this->i_from = i_from;
- this->i_to = i_to;
-}
-
-void WizardDialog::SetTranscode( char const *vcodec, int vb,
- char const *acodec, int ab)
-{
- if( strcmp( vcodec, "dummy") )
- {
- this->vcodec= strdup(vcodec);
- }
- if( strcmp( acodec, "dummy" ) )
- {
- this->acodec = strdup(acodec);
- }
- this->vb = vb;
- this->ab = ab;
-}
-
-void WizardDialog::SetStream( char const *method, char const *address )
-{
- this->method = strdup( method );
- this->address = strdup( address );
-}
-
-void WizardDialog::SetTranscodeOut( wxString address )
-{
- char *psz_utf8 = wxFromLocale( address );
- this->address = strdup( psz_utf8 );
- wxLocaleFree( psz_utf8 );
-}
-
-void WizardDialog::SetMux( char const *mux )
-{
- this->mux = strdup( mux );
-}
-
-void WizardDialog::SetAction( int i_action )
-{
- this->i_action = i_action;
-}
-
-int WizardDialog::GetAction()
-{
- return i_action;
-}
-
-void WizardDialog::Run()
-{
- if( RunWizard(page1) )
- {
- char *psz_opt;
-
- if( i_action == ACTION_TRANSCODE )
- {
- msg_Dbg( p_intf,"starting transcode of %s to file %s",
- mrl, address);
- msg_Dbg( p_intf,"using %s (%i kbps) / %s (%i kbps),encap %s",
- vcodec,vb,acodec,ab,mux);
- char *psz_transcode;
-
- if( vcodec != NULL || acodec != NULL )
- {
- int i_tr_size = 14;
- if( vcodec != NULL )
- i_tr_size += strlen( vcodec ) + 17;
- if( acodec != NULL )
- i_tr_size += strlen( acodec ) + 17;
-
- if( vb > 999999 )
- vb = 999999;
- else if( vb < 0 )
- vb = 0;
-
- if( ab > 999999 )
- ab = 999999;
- else if( ab < 0 )
- ab = 0;
-
- psz_transcode = (char *)malloc( i_tr_size );
-
- strcpy( psz_transcode, "transcode{" );
- if( vcodec != NULL )
- {
- sprintf( psz_transcode + strlen( psz_transcode ),
- "vcodec=%s,vb=%i%s", vcodec, vb,
- ( acodec != NULL ) ? "," : "}:" );
- }
- if( acodec != NULL )
- {
- sprintf( psz_transcode + strlen( psz_transcode ),
- "acodec=%s,ab=%i}:", acodec, ab );
- }
- }
- else
- psz_transcode = "";
-
- asprintf( &psz_opt, ":sout=#%sstandard{mux=%s,dst=%s,"
- "access=file}", psz_transcode, mux, address );
-
- if( *psz_transcode )
- free( psz_transcode );
- }
- else
- {
- char *psz_sap_option = NULL;
- bool v6;
-
- msg_Dbg( p_intf, "starting stream of %s to %s using %s, encap %s",
- mrl, address, method, mux );
- if( b_sap )
- {
- if( psz_sap_name )
- {
- asprintf( &psz_sap_option,
- ",sap,name=\"%s\"", psz_sap_name );
- }
- else
- psz_sap_option = strdup( ",sap" );
-
- }
-
- /* Add brackets automatically for IPv6 if they are missing */
- v6 = ( address[0] != '[' ) && ( strchr( address, ':' ) != NULL );
- asprintf( &psz_opt,
- ":sout=#%smux=%s,dst=%s%s%s%s}", method,
- mux, v6 ? "[" : "", address, v6 ? "]" : "",
- psz_sap_option ?: "" );
- free( psz_sap_option );
- }
-
- playlist_t *p_playlist = pl_Hold( p_intf );
- if( p_playlist )
- {
- input_item_t *p_input = input_item_New( p_playlist, mrl,
- ITEM_NAME );
- input_item_AddOption( p_input, psz_opt, VLC_INPUT_OPTION_TRUSTED );
- if( i_from != 0)
- {
- char psz_from[20];
- snprintf( psz_from, 20, "start-time=%i", i_from);
- input_item_AddOption( p_input, psz_from, VLC_INPUT_OPTION_TRUSTED );
- }
- if( i_to != 0)
- {
- char psz_to[20];
- snprintf( psz_to, 20, "stop-time=%i", i_to);
- input_item_AddOption( p_input, psz_to, VLC_INPUT_OPTION_TRUSTED );
- }
-
- char psz_ttl[20];
- snprintf( psz_ttl, 20, "ttl=%i",i_ttl );
- input_item_AddOption( p_input, psz_ttl, VLC_INPUT_OPTION_TRUSTED );
-
- /* FIXME: playlist_AddInput() can fail */
- playlist_AddInput( p_playlist, p_input,
- PLAYLIST_GO, PLAYLIST_END, true, pl_Unlocked );
- vlc_gc_decref( p_input );
- pl_Release( p_intf );
- }
- else
- {
- wxMessageBox( wxU( NO_PLAYLIST ), wxU( ERROR_MSG ),
- wxICON_WARNING | wxOK, this );
- }
- }
-}
+++ /dev/null
-/*****************************************************************************
- * wizard.hpp: Stream wizard headers
- *****************************************************************************
- * Copyright (C) 1999-2005 the VideoLAN team
- * $Id$
- *
- * Authors: Clément Stenac <zorglub@videolan.org>
- *
- * 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., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
- *****************************************************************************/
-
-#ifndef _WXVLC_WIZARD_H_
-#define _WXVLC_WIZARD_H_
-
-#include "wxwidgets.hpp"
-#include <wx/wizard.h>
-
-namespace wxvlc
-{
- /* Wizard */
- class WizardDialog : public wxWizard
- {
- public:
- /* Constructor */
- WizardDialog( intf_thread_t *, wxWindow *p_parent, char *, int, int );
- virtual ~WizardDialog();
- void SetTranscode( char const *vcodec, int vb, char const *acodec,
- int ab);
- void SetMrl( const char *mrl );
- void SetTTL( int i_ttl );
- void SetPartial( int, int );
- void SetStream( char const *method, char const *address );
- void SetTranscodeOut( wxString address );
- void SetAction( int i_action );
- int GetAction();
- void SetSAP( bool b_enabled, const char *psz_name );
- void SetMux( char const *mux );
- void Run();
- int i_action;
- char *method;
-
- protected:
- int vb,ab;
- int i_from, i_to, i_ttl;
- char *vcodec , *acodec , *address , *mrl , *mux ;
- char *psz_sap_name;
- bool b_sap;
- DECLARE_EVENT_TABLE();
-
- intf_thread_t *p_intf;
- };
-};
-
-#endif
+++ /dev/null
-/*****************************************************************************
- * extrapanel.cpp : wxWindows plugin for vlc
- *****************************************************************************
- * Copyright (C) 2000-2004, 2003 the VideoLAN team
- * $Id$
- *
- * Authors: Clément Stenac <zorglub@videolan.org>
- *
- * 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., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
- *****************************************************************************/
-
-/*****************************************************************************
- * Preamble
- *****************************************************************************/
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include <vlc_common.h>
-#include <vlc_aout.h>
-#include <vlc_vout.h>
-#include <vlc_interface.h>
-
-#include <math.h>
-
-#include "extrapanel.hpp"
-
-/*****************************************************************************
- * Local class declarations.
- *****************************************************************************/
-
-#define SMOOTH_TIP N_( "Controls the blending of equalizer bands. The higher" \
- " this value is, the more correlated their movement will be." )
-
-static int IntfBandsCallback( vlc_object_t *, char const *,
- vlc_value_t, vlc_value_t, void * );
-static int IntfPreampCallback( vlc_object_t *, char const *,
- vlc_value_t, vlc_value_t, void * );
-static void ChangeFiltersString( intf_thread_t *, aout_instance_t *,
- char *, bool );
-static void ChangeVFiltersString( intf_thread_t *, char *, bool );
-static void ChangeVFilters2String( intf_thread_t *, char *, bool );
-
-/* IDs for the controls and the menu commands */
-enum
-{
- Notebook_Event,
-
- Adjust_Event,
- RestoreDefaults_Event,
-
- Hue_Event,
- Contrast_Event,
- Brightness_Event,
- Saturation_Event,
- Gamma_Event,
- Ratio_Event,
-
- FiltersInfo_Event,
-
- Filter0_Event, Filter1_Event, Filter2_Event, Filter3_Event, Filter4_Event,
- Filter5_Event, Filter6_Event, Filter7_Event, Filter8_Event, Filter9_Event,
-
- EqEnable_Event,
- Eq2Pass_Event,
- EqRestore_Event,
-
- Smooth_Event,
-
- Preamp_Event,
-
- Band0_Event,Band1_Event,Band2_Event,Band3_Event,Band4_Event,
- Band5_Event,Band6_Event,Band7_Event,Band8_Event,Band9_Event,
-
- NormVol_Event, NVSlider_Event, HeadPhone_Event
-};
-
-BEGIN_EVENT_TABLE( ExtraPanel, wxPanel )
- EVT_IDLE( ExtraPanel::OnIdle )
-
- /* Equalizer */
- EVT_CHECKBOX( EqEnable_Event, ExtraPanel::OnEnableEqualizer )
- EVT_CHECKBOX( Eq2Pass_Event, ExtraPanel::OnEq2Pass )
- EVT_BUTTON( EqRestore_Event, ExtraPanel::OnEqRestore )
-
- EVT_COMMAND_SCROLL( Preamp_Event, ExtraPanel::OnPreamp )
- EVT_COMMAND_SCROLL( Smooth_Event, ExtraPanel::OnEqSmooth )
-
- EVT_COMMAND_SCROLL(Band0_Event, ExtraPanel::OnChangeEqualizer)
- EVT_COMMAND_SCROLL(Band1_Event, ExtraPanel::OnChangeEqualizer)
- EVT_COMMAND_SCROLL(Band2_Event, ExtraPanel::OnChangeEqualizer)
- EVT_COMMAND_SCROLL(Band3_Event, ExtraPanel::OnChangeEqualizer)
- EVT_COMMAND_SCROLL(Band4_Event, ExtraPanel::OnChangeEqualizer)
- EVT_COMMAND_SCROLL(Band5_Event, ExtraPanel::OnChangeEqualizer)
- EVT_COMMAND_SCROLL(Band6_Event, ExtraPanel::OnChangeEqualizer)
- EVT_COMMAND_SCROLL(Band7_Event, ExtraPanel::OnChangeEqualizer)
- EVT_COMMAND_SCROLL(Band8_Event, ExtraPanel::OnChangeEqualizer)
- EVT_COMMAND_SCROLL(Band9_Event, ExtraPanel::OnChangeEqualizer)
-
- /* Video */
- EVT_CHECKBOX( Adjust_Event, ExtraPanel::OnEnableAdjust )
- EVT_BUTTON( RestoreDefaults_Event, ExtraPanel::OnRestoreDefaults )
-
- EVT_COMMAND_SCROLL(Hue_Event, ExtraPanel::OnAdjustUpdate)
- EVT_COMMAND_SCROLL(Contrast_Event, ExtraPanel::OnAdjustUpdate)
- EVT_COMMAND_SCROLL(Brightness_Event, ExtraPanel::OnAdjustUpdate)
- EVT_COMMAND_SCROLL(Saturation_Event, ExtraPanel::OnAdjustUpdate)
- EVT_COMMAND_SCROLL(Gamma_Event, ExtraPanel::OnAdjustUpdate)
-
- EVT_BUTTON( FiltersInfo_Event, ExtraPanel::OnFiltersInfo )
-
- EVT_CHECKBOX( Filter0_Event, ExtraPanel::OnSelectFilter )
- EVT_CHECKBOX( Filter1_Event, ExtraPanel::OnSelectFilter )
- EVT_CHECKBOX( Filter2_Event, ExtraPanel::OnSelectFilter )
- EVT_CHECKBOX( Filter3_Event, ExtraPanel::OnSelectFilter )
- EVT_CHECKBOX( Filter4_Event, ExtraPanel::OnSelectFilter )
- EVT_CHECKBOX( Filter5_Event, ExtraPanel::OnSelectFilter )
- EVT_CHECKBOX( Filter6_Event, ExtraPanel::OnSelectFilter )
- EVT_CHECKBOX( Filter7_Event, ExtraPanel::OnSelectFilter )
- EVT_CHECKBOX( Filter8_Event, ExtraPanel::OnSelectFilter )
- EVT_CHECKBOX( Filter9_Event, ExtraPanel::OnSelectFilter )
-
- /* Audio */
- EVT_CHECKBOX( NormVol_Event, ExtraPanel::OnNormvol )
- EVT_CHECKBOX( HeadPhone_Event, ExtraPanel::OnHeadphone )
-
- EVT_COMMAND_SCROLL( NVSlider_Event, ExtraPanel::OnNormvolSlider )
-
-END_EVENT_TABLE()
-
-struct filter {
- char *psz_filter;
- char *psz_name;
- char *psz_help;
- bool b_vfilter2;
-};
-
-static const struct filter vfilters[] =
-{
- { "clone", N_("Image clone"), N_("Creates several clones of the image"), false },
- { "gradient", N_("Cartoon effect"), N_("Gradient effects (cartoon) on the image"), true },
- { "invert", N_("Image inversion") , N_("Inverts the colors of the image"), true },
- { "motionblur", N_("Blurring"), N_("Adds motion blurring to the image"), true },
- { "ripple", N_("Water effect"), N_("Adds water effect to the image"), true },
- { "wave", N_("Wave effect"), N_("Adds wave effect to the image"), true },
- { "transform", N_("Transformation"), N_("Rotates or flips the image"), false },
- { "magnify", N_("Magnify"), N_("Magnifies part of the image"), false },
- { "puzzle", N_("Puzzle"), N_("Turns the image into a puzzle"), false },
- { NULL, NULL, NULL } /* Do not remove this line */
-};
-
-/*****************************************************************************
- * Constructor.
- *****************************************************************************/
-ExtraPanel::ExtraPanel( intf_thread_t *_p_intf, wxWindow *_p_parent ):
- wxPanel( _p_parent , -1, wxDefaultPosition, wxDefaultSize )
-{
-
- p_intf = _p_intf;
- p_parent = _p_parent;
- SetAutoLayout( TRUE );
-
- wxBoxSizer *extra_sizer = new wxBoxSizer( wxHORIZONTAL );
-
- notebook = new wxNotebook( this, Notebook_Event );
-
-#if (!wxCHECK_VERSION(2,5,2))
- wxNotebookSizer *notebook_sizer = new wxNotebookSizer( notebook );
-#endif
-
- notebook->AddPage( VideoPanel( notebook ), wxU(_("Video")) );
- notebook->AddPage( EqzPanel( notebook ), wxU(_("Equalizer")) );
- notebook->AddPage( AudioPanel( notebook ), wxU(_("Audio")) );
-
-#if (!wxCHECK_VERSION(2,5,2))
- extra_sizer->Add( notebook_sizer, 1, wxEXPAND, 0 );
-#else
- extra_sizer->Add( notebook, 1, wxEXPAND, 0 );
-#endif
-
- SetSizerAndFit( extra_sizer );
- extra_sizer->Layout();
-}
-
-ExtraPanel::~ExtraPanel()
-{
-}
-
-/* Video Panel constructor */
-wxPanel *ExtraPanel::VideoPanel( wxWindow *parent )
-{
- char *psz_filters;
-
- wxPanel *panel = new wxPanel( parent, -1 );
- wxBoxSizer *panel_sizer = new wxBoxSizer( wxHORIZONTAL );
-
- /* Create static box to surround the adjust controls */
- wxStaticBox *adjust_box =
- new wxStaticBox( panel, -1, wxU(_("Image adjustment" )) );
- wxStaticBoxSizer *adjust_sizer =
- new wxStaticBoxSizer( adjust_box, wxVERTICAL );
- adjust_sizer->SetMinSize( -1, 50 );
-
- /* Create flex grid */
- wxFlexGridSizer *adjust_gridsizer =
- new wxFlexGridSizer( 6, 2, 0, 0);
- adjust_gridsizer->AddGrowableCol(1);
-
- /* Create the adjust button */
- wxCheckBox * adjust_check = new wxCheckBox( panel, Adjust_Event,
- wxU(_("Enable")));
-
- /* Create the restore to defaults button */
- restoredefaults_button =
- new wxButton( panel, RestoreDefaults_Event,
- wxU(_("Restore Defaults")), wxDefaultPosition);
-
- wxStaticText *hue_text = new wxStaticText( panel, -1,
- wxU(_("Hue")) );
- hue_slider = new wxSlider ( panel, Hue_Event, 0, 0,
- 360, wxDefaultPosition, wxDefaultSize );
-
- wxStaticText *contrast_text = new wxStaticText( panel, -1,
- wxU(_("Contrast")) );
- contrast_slider = new wxSlider ( panel, Contrast_Event, 0, 0,
- 200, wxDefaultPosition, wxDefaultSize);
-
- wxStaticText *brightness_text = new wxStaticText( panel, -1,
- wxU(_("Brightness")) );
- brightness_slider = new wxSlider ( panel, Brightness_Event, 0, 0,
- 200, wxDefaultPosition, wxDefaultSize) ;
-
- wxStaticText *saturation_text = new wxStaticText( panel, -1,
- wxU(_("Saturation")) );
- saturation_slider = new wxSlider ( panel, Saturation_Event, 0, 0,
- 300, wxDefaultPosition, wxDefaultSize );
-
- wxStaticText *gamma_text = new wxStaticText( panel, -1,
- wxU(_("Gamma")) );
- gamma_slider = new wxSlider ( panel, Gamma_Event, 0, 0,
- 100, wxDefaultPosition, wxDefaultSize );
-
- adjust_gridsizer->Add( adjust_check, 1, wxEXPAND|wxALL, 2 );
- adjust_gridsizer->Add( restoredefaults_button, 1, wxEXPAND|wxALL, 2 );
- adjust_gridsizer->Add( hue_text, 1, wxEXPAND|wxALL, 2 );
- adjust_gridsizer->Add( hue_slider, 1, wxEXPAND|wxALL, 2 );
- adjust_gridsizer->Add( contrast_text, 1, wxEXPAND|wxALL, 2 );
- adjust_gridsizer->Add( contrast_slider, 1, wxEXPAND|wxALL, 2 );
- adjust_gridsizer->Add( brightness_text, 1, wxEXPAND|wxALL, 2 );
- adjust_gridsizer->Add( brightness_slider, 1, wxEXPAND|wxALL, 2 );
- adjust_gridsizer->Add( saturation_text, 1, wxEXPAND|wxALL, 2 );
- adjust_gridsizer->Add( saturation_slider, 1, wxEXPAND|wxALL, 2 );
- adjust_gridsizer->Add( gamma_text, 1, wxEXPAND|wxALL, 2 );
- adjust_gridsizer->Add( gamma_slider, 1, wxEXPAND|wxALL, 2 );
-
- adjust_sizer->Add( adjust_gridsizer, 1, wxEXPAND|wxALL, 2);
-
- panel_sizer->Add( adjust_sizer , 1, wxTOP, 2 );
-
-#if 0
- /* Create sizer to surround the other controls */
- wxBoxSizer *other_sizer = new wxBoxSizer( wxVERTICAL );
-
- wxStaticBox *video_box =
- new wxStaticBox( panel, -1, wxU(_("Video Options")) );
- /* Create the sizer for the frame */
- wxStaticBoxSizer *video_sizer =
- new wxStaticBoxSizer( video_box, wxVERTICAL );
- video_sizer->SetMinSize( -1, 50 );
-
- static const wxString ratio_array[] =
- {
- wxT("4:3"),
- wxT("16:9"),
- };
-
- wxBoxSizer *ratio_sizer = new wxBoxSizer( wxHORIZONTAL );
- wxStaticText *ratio_text = new wxStaticText( panel, -1,
- wxU(_("Aspect Ratio")) );
-
- ratio_combo = new wxComboBox( panel, Ratio_Event, wxT(""),
- wxDefaultPosition, wxSize( 80 , -1),
- WXSIZEOF(ratio_array), ratio_array,
- 0 );
-
- ratio_sizer->Add( ratio_text, 0, wxALL, 2 );
- ratio_sizer->Add( ratio_combo, 0, wxALL, 2 );
- ratio_sizer->Layout();
-
- video_sizer->Add( ratio_sizer , 0 , wxALL , 2 );
- video_sizer->Layout();
-#endif
-
- wxStaticBox *filter_box =
- new wxStaticBox( panel, -1, wxU(_("Video filters")) );
- wxStaticBoxSizer *filter_sizer =
- new wxStaticBoxSizer( filter_box, wxHORIZONTAL );
-
- wxBoxSizer *t_col_sizer = new wxBoxSizer( wxVERTICAL );
-
-
- for( int i = 0 ; vfilters[i].psz_filter != NULL ; i++ )
- {
- wxCheckBox *box = new wxCheckBox( panel, Filter0_Event + i,
- wxU( _( vfilters[i].psz_name ) ) );
- t_col_sizer->Add( box, 0, wxALL, 2 );
- box->SetToolTip( wxU( _( vfilters[i].psz_help ) ) );
- }
-
- filter_sizer->Add( t_col_sizer );
- filter_sizer->Add( new wxButton( panel, FiltersInfo_Event,
- wxU(_("More Info" ) ) ), 0, wxALL, 4 );
-#if 0
- other_sizer->Add( video_sizer, 0, wxALL | wxEXPAND , 0);
- other_sizer->Add( filter_sizer, 0, wxALL | wxEXPAND , 0);
- other_sizer->Layout();
- panel_sizer->Add(other_sizer , 1 );
-#endif
-
- panel_sizer->Add( filter_sizer, 1, wxTOP|wxLEFT, 2 );
-
- panel->SetSizerAndFit( panel_sizer );
-
- /* Layout the whole panel */
- panel_sizer->Layout();
-
- panel_sizer->SetSizeHints( panel );
-
- /* Write down initial values */
- psz_filters = config_GetPsz( p_intf, "vout-filter" );
- if( psz_filters && strstr( psz_filters, "adjust" ) )
- {
- adjust_check->SetValue( 1 );
- restoredefaults_button->Enable();
- saturation_slider->Enable();
- contrast_slider->Enable();
- brightness_slider->Enable();
- hue_slider->Enable();
- gamma_slider->Enable();
- }
- else
- {
- adjust_check->SetValue( 0 );
- restoredefaults_button->Disable();
- saturation_slider->Disable();
- contrast_slider->Disable();
- brightness_slider->Disable();
- hue_slider->Disable();
- gamma_slider->Disable();
- }
- free( psz_filters );
-
- int i_value = config_GetInt( p_intf, "hue" );
- if( i_value > 0 && i_value < 360 )
- hue_slider->SetValue( i_value );
- float f_value;
- f_value = config_GetFloat( p_intf, "saturation" );
- if( f_value > 0 && f_value < 5 )
- saturation_slider->SetValue( (int)(100 * f_value) );
- f_value = config_GetFloat( p_intf, "contrast" );
- if( f_value > 0 && f_value < 4 )
- contrast_slider->SetValue( (int)(100 * f_value) );
- f_value = config_GetFloat( p_intf, "brightness" );
- if( f_value > 0 && f_value < 2 )
- brightness_slider->SetValue( (int)(100 * f_value) );
- f_value = config_GetFloat( p_intf, "gamma" );
- if( f_value > 0 && f_value < 10 )
- gamma_slider->SetValue( (int)(10 * f_value) );
-
- b_update = false;
-
- return panel;
-}
-
-/* Audio panel constructor */
-wxPanel *ExtraPanel::AudioPanel( wxWindow *parent )
-{
- char *psz_filters;
-
- wxPanel *panel = new wxPanel( parent, -1 );
- wxBoxSizer *panel_sizer = new wxBoxSizer( wxHORIZONTAL );
-
- /* Create static box to surround the adjust controls */
- wxStaticBox *filter_box =
- new wxStaticBox( panel, -1, wxU(_("Audio filters")) );
- wxStaticBoxSizer *filter_sizer =
- new wxStaticBoxSizer( filter_box, wxVERTICAL );
- filter_sizer->SetMinSize( -1, 50 );
-
- wxCheckBox * headphone_check = new wxCheckBox( panel, HeadPhone_Event,
- wxU(_("Headphone virtualization")));
- headphone_check->SetToolTip( wxU(_("Imitates the effect of "
- "surround sound when using headphones." ) ) );
-
- wxCheckBox * normvol_check = new wxCheckBox( panel, NormVol_Event,
- wxU(_("Volume normalization")));
- normvol_check->SetToolTip( wxU(_("Prevents the audio output "
- "level from going over a predefined value." ) ) );
-
- wxStaticText *normvol_label = new wxStaticText( panel, -1,
- wxU( _("Maximum level") ) );
-
- wxSlider *normvol_slider = new wxSlider ( panel, NVSlider_Event, 20, 5,
- 100, wxDefaultPosition, wxSize( 100, -1 ) );
-
- filter_sizer->Add( headphone_check, 0, wxALL, 4 );
- filter_sizer->Add( normvol_check, 0, wxALL, 4 );
- filter_sizer->Add( normvol_label, 0, wxALL, 4 );
- filter_sizer->Add( normvol_slider, 0, wxALL, 4 );
-
- panel_sizer->Add( filter_sizer, 1, wxTOP, 2 );
- panel->SetSizerAndFit( panel_sizer );
- panel_sizer->Layout();
- panel_sizer->SetSizeHints( panel );
-
- /* Write down initial values */
- psz_filters = config_GetPsz( p_intf, "audio-filter" );
- if( psz_filters )
- {
- headphone_check->SetValue( strstr( psz_filters, "headphone" ) );
- normvol_check->SetValue( strstr( psz_filters, "normvol" ) );
- free( psz_filters );
- }
- else
- {
- headphone_check->SetValue( 0 );
- normvol_check->SetValue( 0 );
- }
-
- return panel;
-}
-
-
-static const wxString band_frequencies[] =
-{
- wxT(" 60 Hz"),
- wxT("170 Hz"),
- wxT("310 Hz"),
- wxT("600 Hz"),
- wxT(" 1 kHz"),
- wxT(" 3 kHz"),
- wxT(" 6 kHz"),
- wxT("12 kHz"),
- wxT("14 kHz"),
- wxT("16 kHz")
-};
-
-/* Equalizer Panel constructor */
-wxPanel *ExtraPanel::EqzPanel( wxWindow *parent )
-{
- wxPanel *panel = new wxPanel( parent, -1 );
- wxBoxSizer *panel_sizer = new wxBoxSizer( wxVERTICAL );
-
- /* Create static box to surround the adjust controls */
- wxBoxSizer *top_sizer =
- new wxBoxSizer( wxHORIZONTAL );
-
- /* Create the enable button */
- eq_chkbox = new wxCheckBox( panel, EqEnable_Event,
- wxU(_("Enable") ) );
- eq_chkbox->SetToolTip( wxU(_("Enable the equalizer. You can either "
- "manually adjust the bands or use a preset (Audio Menu->Equalizer)." ) ) );
- top_sizer->Add( eq_chkbox, 0, wxALL, 2 );
-
- eq_2p_chkbox = new wxCheckBox( panel, Eq2Pass_Event,
- wxU(_("2 Pass") ) );
-
- eq_2p_chkbox->SetToolTip( wxU(_("Apply the equalizer twice. "
- "The resulting effect will be sharper.") ) );
-
- top_sizer->Add( eq_2p_chkbox, 0, wxALL, 2 );
-
- top_sizer->Add( 0, 0, 1, wxALL, 2 );
-
- eq_restoredefaults_button = new wxButton( panel, EqRestore_Event,
- wxU( _("Restore Defaults") ) );
- top_sizer->Add( eq_restoredefaults_button, 0, wxALL, 2 );
- top_sizer->Add( 0, 0, 1, wxALL, 2 );
-
- smooth_text = new wxStaticText( panel, -1, wxU( _("Smooth :") ));
- smooth_text->SetToolTip( wxU( _(SMOOTH_TIP) ) );
- top_sizer->Add( smooth_text, 0, wxALL, 2 );
-
- smooth_slider =new wxSlider( panel, Smooth_Event, 0, 0, 10 ,
- wxDefaultPosition, wxSize( 100, -1 ) );
- smooth_slider->SetToolTip( wxU( _(SMOOTH_TIP) ) );
- top_sizer->Add( smooth_slider, 0, wxALL, 2 );
- i_smooth = 0;
-
- /* Create flex grid */
- wxFlexGridSizer *eq_gridsizer =
- new wxFlexGridSizer( 2, 12, 0, 0);
- eq_gridsizer->AddGrowableRow( 0 );
- eq_gridsizer->AddGrowableCol( 1 );
-
- preamp_slider = new wxSlider( panel, Preamp_Event, 80, 0, 400,
- wxDefaultPosition, wxSize( -1 , 90 ) , wxSL_VERTICAL );
- eq_gridsizer->Add( preamp_slider, 1, wxEXPAND|wxALL, 2 );
-
- eq_gridsizer->Add( 0, 0, 1, wxALL, 2 );
-
- for( int i = 0 ; i < 10 ; i++ )
- {
- band_sliders[i] = new wxSlider( panel, Band0_Event + i, 200, 0, 400,
- wxDefaultPosition, wxSize( -1 , 90 ) , wxSL_VERTICAL );
-
- i_values[i] = 200;
- eq_gridsizer->Add( band_sliders[i], 1, wxEXPAND|wxALL, 2 );
- }
-
- preamp_text = new wxStaticText( panel, -1, wxU( _("Preamp\n12.0dB") ) );
- wxFont font= preamp_text->GetFont();
- font.SetPointSize(7);
- preamp_text->SetFont( font );
- eq_gridsizer->Add( preamp_text, wxALL, 2 );
-
- eq_gridsizer->Add( 0, 0, 1 );
-
- for( int i = 0 ; i < 10 ; i++ )
- {
- band_texts[i] = new wxStaticText( panel, -1,
- band_frequencies[i] + wxU("\n0.0dB" ) ) ;
- eq_gridsizer->Add( band_texts[i], 1, wxEXPAND|wxALL, 2 );
- wxFont font= band_texts[i]->GetFont();
- font.SetPointSize(7);
- band_texts[i]->SetFont( font );
- }
-
- panel_sizer->Add( top_sizer , 0 , wxTOP | wxEXPAND, 5 );
- panel_sizer->Add( eq_gridsizer , 0 , wxEXPAND, 0 );
-
- panel->SetSizer( panel_sizer );
-
- panel_sizer->Layout();
-
- panel_sizer->SetSizeHints( panel );
-
- CheckAout();
-
- aout_instance_t *p_aout = (aout_instance_t *)vlc_object_find(p_intf,
- VLC_OBJECT_AOUT, FIND_ANYWHERE);
- char *psz_af;
- if( p_aout )
- {
- psz_af = var_GetNonEmptyString( p_aout, "audio-filter" );
- if( var_GetBool( p_aout, "equalizer-2pass" ) )
- eq_2p_chkbox->SetValue( true );
- vlc_object_release( p_aout );
- }
- else
- {
- psz_af = config_GetPsz( p_intf, "audio-filter" );
- if( config_GetInt( p_intf, "equalizer-2pass" ) )
- eq_2p_chkbox->SetValue( true );
- }
- if( psz_af != NULL && strstr( psz_af, "equalizer" ) )
- {
- eq_chkbox->SetValue( true );
- } else {
- eq_2p_chkbox->Disable();
- eq_restoredefaults_button->Disable();
- smooth_slider->Disable();
- smooth_text->Disable();
- preamp_slider->Disable();
- preamp_text->Disable();
- for( int i_index=0; i_index < 10; i_index++ )
- {
- band_sliders[i_index]->Disable();
- band_texts[i_index]->Disable();
- }
- }
- free( psz_af );
-
- return panel;
-}
-
-/*******************************************************
- * Event handlers
- *******************************************************/
-
-/* Keep aout up to date and update the bands if needed */
-void ExtraPanel::OnIdle( wxIdleEvent &event )
-{
- CheckAout();
- if( b_update == true )
- {
- if( b_my_update == true )
- {
- b_update = b_my_update = false;
- return;
- }
- char *p = psz_bands;
- for( int i = 0; i < 10; i++ )
- {
- float f;
- char psz_val[5];
- int i_val;
- /* Read dB -20/20*/
- f = strtof( p, &p );
- i_val= (int)( ( f + 20 ) * 10 );
- band_sliders[i]->SetValue( 400 - i_val );
- i_values[i] = 400 - i_val;
- sprintf( psz_val, "%.1f", f );
- band_texts[i]->SetLabel( band_frequencies[i] + wxT("\n") +
- wxU( psz_val ) + wxT("dB") );
- if( p == NULL )
- {
- break;
- }
- p++;
- if( *p == 0 )
- break;
- }
- char psz_val[5];
- int i_val = (int)( ( f_preamp + 20 ) * 10 );
- sprintf( psz_val, "%.1f", f_preamp );
- preamp_slider->SetValue( 400 - i_val );
- const wxString preamp = wxT("Preamp\n");
- preamp_text->SetLabel( preamp + wxU( psz_val ) + wxT( "dB" ) );
- eq_chkbox->SetValue( TRUE );
- b_update = false;
- }
-}
-
-/*************************
- * Equalizer Panel events
- *************************/
-void ExtraPanel::OnEnableEqualizer( wxCommandEvent &event )
-{
- int i_index;
- aout_instance_t *p_aout= (aout_instance_t *)vlc_object_find(p_intf,
- VLC_OBJECT_AOUT, FIND_ANYWHERE);
- ChangeFiltersString( p_intf,p_aout, "equalizer",
- event.IsChecked() ? true : false );
-
- if( event.IsChecked() )
- {
- eq_2p_chkbox->Enable();
- eq_restoredefaults_button->Enable();
- smooth_slider->Enable();
- smooth_text->Enable();
- preamp_slider->Enable();
- preamp_text->Enable();
- for( i_index=0; i_index < 10; i_index++ )
- {
- band_sliders[i_index]->Enable();
- band_texts[i_index]->Enable();
- }
- } else {
- eq_2p_chkbox->Disable();
- eq_restoredefaults_button->Disable();
- smooth_slider->Disable();
- smooth_text->Disable();
- preamp_slider->Disable();
- preamp_text->Disable();
- for( i_index=0; i_index < 10; i_index++ )
- {
- band_sliders[i_index]->Disable();
- band_texts[i_index]->Disable();
- }
- }
-
- if( p_aout != NULL )
- vlc_object_release( p_aout );
-}
-
-void ExtraPanel::OnEqRestore( wxCommandEvent &event )
-{
- aout_instance_t *p_aout= (aout_instance_t *)vlc_object_find(p_intf,
- VLC_OBJECT_AOUT, FIND_ANYWHERE);
- if( p_aout == NULL )
- {
- vlc_value_t val;
- bool b_previous = eq_chkbox->IsChecked();
- val.f_float = 12.0;
- IntfPreampCallback( NULL, NULL, val,val, this );
- config_PutFloat( p_intf, "equalizer-preamp", 12.0 );
- val.psz_string = strdup( "0 0 0 0 0 0 0 0 0 0" );
- IntfBandsCallback( NULL, NULL, val,val, this );
- config_PutPsz( p_intf, "equalizer-bands",
- "0 0 0 0 0 0 0 0 0 0");
- config_PutPsz( p_intf, "equalizer-preset","flat" );
- eq_chkbox->SetValue( b_previous );
- }
- else
- {
- var_SetFloat( p_aout, "equalizer-preamp", 12.0 );
- config_PutFloat( p_intf, "equalizer-preamp", 12.0 );
- var_SetString( p_aout, "equalizer-bands",
- "0 0 0 0 0 0 0 0 0 0");
- config_PutPsz( p_intf, "equalizer-bands",
- "0 0 0 0 0 0 0 0 0 0");
- var_SetString( p_aout , "equalizer-preset" , "flat" );
- config_PutPsz( p_intf, "equalizer-preset","flat" );
- vlc_object_release( p_aout );
- }
-}
-
-void ExtraPanel::OnEq2Pass( wxCommandEvent &event )
-{
- aout_instance_t *p_aout= (aout_instance_t *)vlc_object_find(p_intf,
- VLC_OBJECT_AOUT, FIND_ANYWHERE);
-
- bool b_2p = event.IsChecked() ? true : false;
-
- if( p_aout == NULL )
- {
- config_PutInt( p_intf, "equalizer-2pass", b_2p );
- }
- else
- {
- var_SetBool( p_aout, "equalizer-2pass", b_2p );
- config_PutInt( p_intf, "equalizer-2pass", b_2p );
- if( eq_chkbox->IsChecked() )
- {
- for( int i = 0; i < p_aout->i_nb_inputs; i++ )
- {
- p_aout->pp_inputs[i]->b_restart = true;
- }
- }
- vlc_object_release( p_aout );
- }
-}
-
-void ExtraPanel::OnEqSmooth( wxScrollEvent &event )
-{
- /* Max smoothing : 70% */
- i_smooth = event.GetPosition() * 7;
-}
-
-void ExtraPanel::OnPreamp( wxScrollEvent &event )
-{
- float f= (float)( 400 - event.GetPosition() ) / 10 - 20 ;
- char psz_val[5];
-
- aout_instance_t *p_aout= (aout_instance_t *)vlc_object_find(p_intf,
- VLC_OBJECT_AOUT, FIND_ANYWHERE);
-
- sprintf( psz_val, "%.1f", f );
- const wxString preamp = wxT("Preamp\n");
- preamp_text->SetLabel( preamp + wxU( psz_val ) + wxT( "dB" ) );
-
- if( p_aout == NULL )
- {
- config_PutFloat( p_intf, "equalizer-preamp", f );
- }
- else
- {
- var_SetFloat( p_aout, "equalizer-preamp", f );
- config_PutFloat( p_intf, "equalizer-preamp", f );
- b_my_update = true;
- vlc_object_release( p_aout );
- }
-}
-
-void ExtraPanel::OnChangeEqualizer( wxScrollEvent &event )
-{
- aout_instance_t *p_aout= (aout_instance_t *)vlc_object_find(p_intf,
- VLC_OBJECT_AOUT, FIND_ANYWHERE);
- char psz_values[102];
- memset( psz_values, 0, 102 );
-
-
- /* Smoothing */
- int i_diff = event.GetPosition() - i_values[ event.GetId() - Band0_Event ];
- i_values[ event.GetId() - Band0_Event] = event.GetPosition();
-
- for( int i = event.GetId() + 1 ; i <= Band9_Event ; i++ )
- {
- int i_new = band_sliders[ i-Band0_Event ]->GetValue() +
- (int)( i_diff * pow( (float)i_smooth / 100 , i- event.GetId() ) ) ;
- if( i_new < 0 ) i_new = 0;
- if( i_new > 400 ) i_new = 400;
- band_sliders[ i-Band0_Event ]->SetValue( i_new );
- }
- for( int i = Band0_Event ; i < event.GetId() ; i++ )
- {
- int i_new = band_sliders[ i-Band0_Event ]->GetValue() +
- (int)( i_diff * pow( (float)i_smooth / 100 , event.GetId() - i ) );
- if( i_new < 0 ) i_new = 0;
- if( i_new > 400 ) i_new = 400;
- band_sliders[ i-Band0_Event ]->SetValue( i_new );
- }
-
- /* Write the new bands values */
- for( int i = 0 ; i < 10 ; i++ )
- {
- char psz_val[5];
- float f_val = (float)( 400 - band_sliders[i]->GetValue() ) / 10- 20 ;
- sprintf( psz_values + strlen( psz_value ), " %f", f_val );
- sprintf( psz_val, "%.1f", f_val );
- band_texts[i]->SetLabel( band_frequencies[i] + wxT("\n") +
- wxU( psz_val ) + wxT("dB" ) );
- }
- if( p_aout == NULL )
- {
- config_PutPsz( p_intf, "equalizer-bands", psz_values );
- }
- else
- {
- var_SetString( p_aout, "equalizer-bands", psz_values );
- config_PutPsz( p_intf, "equalizer-bands", psz_values );
- b_my_update = true;
- vlc_object_release( p_aout );
- }
-}
-
-/***********************
- * Audio Panel events
- ***********************/
-void ExtraPanel::OnHeadphone( wxCommandEvent &event )
-{
- aout_instance_t *p_aout= (aout_instance_t *)vlc_object_find(p_intf,
- VLC_OBJECT_AOUT, FIND_ANYWHERE);
- ChangeFiltersString( p_intf , p_aout, "headphone_channel_mixer",
- event.IsChecked() ? true : false );
- if( p_aout != NULL )
- vlc_object_release( p_aout );
-}
-
-void ExtraPanel::OnNormvol( wxCommandEvent &event )
-{
- aout_instance_t *p_aout= (aout_instance_t *)vlc_object_find(p_intf,
- VLC_OBJECT_AOUT, FIND_ANYWHERE);
- ChangeFiltersString( p_intf , p_aout, "normvol",
- event.IsChecked() ? true : false );
- if( p_aout != NULL )
- vlc_object_release( p_aout );
-}
-
-void ExtraPanel::OnNormvolSlider( wxScrollEvent &event )
-{
- aout_instance_t *p_aout= (aout_instance_t *)vlc_object_find(p_intf,
- VLC_OBJECT_AOUT, FIND_ANYWHERE);
- if( p_aout != NULL )
- {
- var_SetFloat( p_aout, "norm-max-level", (float)event.GetPosition()/10 );
- vlc_object_release( p_aout );
- }
- else
- {
- config_PutFloat( p_intf, "norm-max-level",
- (float)event.GetPosition()/10 );
- }
-}
-/***********************
- * Video Panel events
- ***********************/
-void ExtraPanel::OnEnableAdjust(wxCommandEvent& event)
-{
- ChangeVFiltersString( p_intf, "adjust",
- event.IsChecked() ? true : false );
-
- if( event.IsChecked() )
- {
- restoredefaults_button->Enable();
- brightness_slider->Enable();
- saturation_slider->Enable();
- contrast_slider->Enable();
- hue_slider->Enable();
- gamma_slider->Enable();
- }
- else
- {
- restoredefaults_button->Disable();
- brightness_slider->Disable();
- saturation_slider->Disable();
- contrast_slider->Disable();
- hue_slider->Disable();
- gamma_slider->Disable();
- }
-}
-
-void ExtraPanel::OnRestoreDefaults( wxCommandEvent &event)
-{
- hue_slider->SetValue(0);
- saturation_slider->SetValue(100);
- brightness_slider->SetValue(100);
- contrast_slider->SetValue(100),
- gamma_slider->SetValue(10);
-
- wxScrollEvent *hscroll_event = new wxScrollEvent(0, Hue_Event, 0);
- OnAdjustUpdate(*hscroll_event);
-
- wxScrollEvent *sscroll_event = new wxScrollEvent(0, Saturation_Event, 100);
- OnAdjustUpdate(*sscroll_event);
-
- wxScrollEvent *bscroll_event = new wxScrollEvent(0, Brightness_Event, 100);
- OnAdjustUpdate(*bscroll_event);
-
- wxScrollEvent *cscroll_event = new wxScrollEvent(0, Contrast_Event, 100);
- OnAdjustUpdate(*cscroll_event);
-
- wxScrollEvent *gscroll_event = new wxScrollEvent(0, Gamma_Event, 10);
- OnAdjustUpdate(*gscroll_event);
-
-}
-
-void ExtraPanel::OnAdjustUpdate( wxScrollEvent &event)
-{
- vout_thread_t *p_vout = (vout_thread_t *)vlc_object_find(p_intf,
- VLC_OBJECT_VOUT, FIND_ANYWHERE);
- if( p_vout == NULL )
- {
- switch( event.GetId() )
- {
- case Hue_Event:
- config_PutInt( p_intf , "hue" , event.GetPosition() );
- break;
-
- case Saturation_Event:
- config_PutFloat( p_intf , "saturation" ,
- (float)event.GetPosition()/100 );
- break;
-
- case Brightness_Event:
- config_PutFloat( p_intf , "brightness" ,
- (float)event.GetPosition()/100 );
- break;
-
- case Contrast_Event:
- config_PutFloat( p_intf , "contrast" ,
- (float)event.GetPosition()/100 );
- break;
-
- case Gamma_Event:
- config_PutFloat( p_intf , "gamma" ,
- (float)event.GetPosition()/10 );
- break;
- }
- }
- else
- {
- vlc_value_t val;
- switch( event.GetId() )
- {
- case Hue_Event:
- val.i_int = event.GetPosition();
- var_Set( p_vout, "hue", val );
- config_PutInt( p_intf , "hue" , event.GetPosition() );
- break;
-
- case Saturation_Event:
- val.f_float = (float)event.GetPosition() / 100;
- var_Set( p_vout, "saturation", val );
- config_PutFloat( p_intf , "saturation" ,
- (float)event.GetPosition()/100 );
- break;
-
- case Brightness_Event:
- val.f_float = (float)event.GetPosition() / 100;
- var_Set( p_vout, "brightness", val );
- config_PutFloat( p_intf , "brightness" ,
- (float)event.GetPosition()/100 );
- break;
-
- case Contrast_Event:
- val.f_float = (float)event.GetPosition() / 100;
- var_Set( p_vout, "contrast", val );
- config_PutFloat( p_intf , "contrast" ,
- (float)event.GetPosition()/100 );
- break;
-
- case Gamma_Event:
- val.f_float = (float)event.GetPosition() / 10;
- var_Set( p_vout, "gamma", val );
- config_PutFloat( p_intf , "gamma" ,
- (float)event.GetPosition()/10 );
- break;
- }
- vlc_object_release(p_vout);
- }
-}
-
-/* FIXME */
-void ExtraPanel::OnRatio( wxCommandEvent& event )
-{
- config_PutPsz( p_intf, "aspect-ratio", ratio_combo->GetValue().mb_str(wxConvUTF8) );
-}
-
-
-void ExtraPanel::OnSelectFilter(wxCommandEvent& event)
-{
- int i_filter = event.GetId() - Filter0_Event ;
- if( vfilters[i_filter].psz_filter )
- {
- if( vfilters[i_filter].b_vfilter2 )
- ChangeVFilters2String( p_intf, vfilters[i_filter].psz_filter ,
- event.IsChecked() ? true : false );
- else
- ChangeVFiltersString( p_intf, vfilters[i_filter].psz_filter ,
- event.IsChecked() ? true : false );
- }
-}
-
-void ExtraPanel::OnFiltersInfo(wxCommandEvent& event)
-{
- wxMessageBox( wxU( _("Filtering effects to apply to the video. "
- "You must restart the stream for these settings to "
- "take effect.\n\n"
- "To configure these filters, go to Preferences / Video / "
- "Filters. In order to control the order in which they "
- "are applied, enter a filters string in the Video Filter "
- "Module inside the preferences."
- ) ),
- wxU( _("More Information" ) ), wxOK | wxICON_INFORMATION,
- this->p_parent );
-}
-/**********************************
- * Other functions
- **********************************/
-void ExtraPanel::CheckAout()
-{
- aout_instance_t *p_aout= (aout_instance_t *)vlc_object_find(p_intf,
- VLC_OBJECT_AOUT, FIND_ANYWHERE);
- if( p_aout != NULL )
- {
- if( p_aout != p_intf->p_sys->p_aout )
- {
- /* We want to know if someone changes the bands */
- if( var_AddCallback( p_aout, "equalizer-bands",
- IntfBandsCallback, this ) )
- {
- /* The variable does not exist yet, wait */
- vlc_object_release( p_aout );
- return;
- }
- if( var_AddCallback( p_aout, "equalizer-preamp",
- IntfPreampCallback, this ) )
- {
- vlc_object_release( p_aout );
- return;
- }
- /* Ok, we have our variables, make a first update round */
- p_intf->p_sys->p_aout = p_aout;
-
- f_preamp = var_GetFloat( p_aout, "equalizer-preamp" );
- psz_bands = var_GetNonEmptyString( p_aout, "equalizer-bands" );
- if( psz_bands == NULL )
- psz_bands = strdup("");
- b_update = true;
- }
- vlc_object_release( p_aout );
- }
-}
-
-static void ChangeVFiltersString( intf_thread_t *p_intf,
- char *psz_name, bool b_add )
-{
- vout_thread_t *p_vout;
- char *psz_parser, *psz_string;
-
- psz_string = config_GetPsz( p_intf, "vout-filter" );
-
- if( !psz_string ) psz_string = strdup("");
-
- psz_parser = strstr( psz_string, psz_name );
-
- if( b_add )
- {
- if( !psz_parser )
- {
- psz_parser = psz_string;
- asprintf( &psz_string, (*psz_string) ? "%s:%s" : "%s%s",
- psz_string, psz_name );
- free( psz_parser );
- }
- else
- {
- return;
- }
- }
- else
- {
- if( psz_parser )
- {
- memmove( psz_parser, psz_parser + strlen(psz_name) +
- (*(psz_parser + strlen(psz_name)) == ':' ? 1 : 0 ),
- strlen(psz_parser + strlen(psz_name)) + 1 );
-
- /* Remove trailing : : */
- if( *(psz_string+strlen(psz_string ) -1 ) == ':' )
- {
- *(psz_string+strlen(psz_string ) -1 ) = '\0';
- }
- }
- else
- {
- free( psz_string );
- return;
- }
- }
- /* Vout is not kept, so put that in the config */
- config_PutPsz( p_intf, "vout-filter", psz_string );
-
- /* Try to set on the fly */
- p_vout = (vout_thread_t *)vlc_object_find( p_intf, VLC_OBJECT_VOUT,
- FIND_ANYWHERE );
- if( p_vout )
- {
- var_SetString( p_vout, "vout-filter", psz_string );
- vlc_object_release( p_vout );
- }
-
- free( psz_string );
-}
-
-static void ChangeVFilters2String( intf_thread_t *p_intf,
- char *psz_name, bool b_add )
-{
- vout_thread_t *p_vout;
- char *psz_parser, *psz_string;
-
- psz_string = config_GetPsz( p_intf, "video-filter" );
-
- if( !psz_string ) psz_string = strdup("");
-
- psz_parser = strstr( psz_string, psz_name );
-
- if( b_add )
- {
- if( !psz_parser )
- {
- psz_parser = psz_string;
- asprintf( &psz_string, (*psz_string) ? "%s:%s" : "%s%s",
- psz_string, psz_name );
- free( psz_parser );
- }
- else
- {
- return;
- }
- }
- else
- {
- if( psz_parser )
- {
- memmove( psz_parser, psz_parser + strlen(psz_name) +
- (*(psz_parser + strlen(psz_name)) == ':' ? 1 : 0 ),
- strlen(psz_parser + strlen(psz_name)) + 1 );
-
- /* Remove trailing : : */
- if( *(psz_string+strlen(psz_string ) -1 ) == ':' )
- {
- *(psz_string+strlen(psz_string ) -1 ) = '\0';
- }
- }
- else
- {
- free( psz_string );
- return;
- }
- }
- /* Vout is not kept, so put that in the config */
- config_PutPsz( p_intf, "video-filter", psz_string );
-
- /* Try to set on the fly */
- p_vout = (vout_thread_t *)vlc_object_find( p_intf, VLC_OBJECT_VOUT,
- FIND_ANYWHERE );
- if( p_vout )
- {
- var_SetString( p_vout, "video-filter", psz_string );
- vlc_object_release( p_vout );
- }
- free( psz_string );
-}
-
-
-static void ChangeFiltersString( intf_thread_t *p_intf,
- aout_instance_t * p_aout,
- char *psz_name, bool b_add )
-{
- char *psz_parser, *psz_string;
-
- if( p_aout )
- {
- psz_string = var_GetNonEmptyString( p_aout, "audio-filter" );
- }
- else
- {
- psz_string = config_GetPsz( p_intf, "audio-filter" );
- }
-
- if( !psz_string ) psz_string = strdup("");
-
- psz_parser = strstr( psz_string, psz_name );
-
- if( b_add )
- {
- if( !psz_parser )
- {
- psz_parser = psz_string;
- asprintf( &psz_string, (*psz_string) ? "%s:%s" : "%s%s",
- psz_string, psz_name );
- free( psz_parser );
- }
- else
- {
- return;
- }
- }
- else
- {
- if( psz_parser )
- {
- memmove( psz_parser, psz_parser + strlen(psz_name) +
- (*(psz_parser + strlen(psz_name)) == ':' ? 1 : 0 ),
- strlen(psz_parser + strlen(psz_name)) + 1 );
-
- if( *(psz_string+strlen(psz_string ) -1 ) == ':' )
- {
- *(psz_string+strlen(psz_string ) -1 ) = '\0';
- }
- }
- else
- {
- free( psz_string );
- return;
- }
- }
-
- if( p_aout == NULL )
- {
- config_PutPsz( p_intf, "audio-filter", psz_string );
- }
- else
- {
- var_SetString( p_aout, "audio-filter", psz_string );
- for( int i = 0; i < p_aout->i_nb_inputs; i++ )
- {
- p_aout->pp_inputs[i]->b_restart = true;
- }
- }
- free( psz_string );
-}
-
-
-static int IntfBandsCallback( vlc_object_t *p_this, char const *psz_cmd,
- vlc_value_t oldval, vlc_value_t newval, void *param )
-{
- ExtraPanel *p_panel = (ExtraPanel *)param;
-
- p_panel->psz_bands = strdup( newval.psz_string );
- p_panel->b_update = true;
-
- return VLC_SUCCESS;
-}
-
-static int IntfPreampCallback( vlc_object_t *p_this, char const *psz_cmd,
- vlc_value_t oldval, vlc_value_t newval, void *param )
-{
- ExtraPanel *p_panel = (ExtraPanel *)param;
-
- p_panel->f_preamp = newval.f_float;
- p_panel->b_update = true;
-
- return VLC_SUCCESS;
-}
-
-#if 0
-/**********************************************************************
- * A small window to contain the extrapanel in its undocked state
- **********************************************************************/
-BEGIN_EVENT_TABLE(ExtraWindow, wxFrame)
-END_EVENT_TABLE()
-
-
-ExtraWindow::ExtraWindow( intf_thread_t *_p_intf, wxWindow *p_parent,
- wxPanel *_extra_panel ):
- wxFrame( p_parent, -1, wxU(_("Extended controls")), wxDefaultPosition,
- wxDefaultSize, wxDEFAULT_FRAME_STYLE )
-{
- p_intf = _p_intf;
- SetIcon( *p_intf->p_sys->p_icon );
-
- wxBoxSizer *window_sizer = new wxBoxSizer( wxVERTICAL );
- SetSizer( window_sizer );
-
- panel = _extra_panel;
- window_sizer->Add( panel );
-
- window_sizer->Layout();
- window_sizer->Fit( this );
-
- Show();
-}
-
-ExtraWindow::~ExtraWindow()
-{
- delete panel;
-}
-#endif
+++ /dev/null
-/*****************************************************************************
- * extrapanel.hpp: Headers for the extra panel window
- *****************************************************************************
- * Copyright (C) 1999-2005 the VideoLAN team
- * $Id$
- *
- * Authors: Clément Stenac <zorglub@videolan.org>
- *
- * 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., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
- *****************************************************************************/
-
-#ifndef _WXVLC_EXTRAPANEL_H_
-#define _WXVLC_EXTRAPANEL_H_
-
-#include "wxwidgets.hpp"
-#include <wx/notebook.h>
-
-namespace wxvlc
-{
- /* Extended panel */
- class ExtraPanel: public wxPanel
- {
- public:
- /* Constructor */
- ExtraPanel( intf_thread_t *p_intf, wxWindow *p_parent );
- virtual ~ExtraPanel();
-
- /// \todo Check access level for these
- wxStaticBox *adjust_box;
- wxButton *restoredefaults_button;
- wxSlider *brightness_slider;
- wxSlider *contrast_slider;
- wxSlider *saturation_slider;
- wxSlider *hue_slider;
- wxSlider *gamma_slider;
-
- wxStaticBox *other_box;
- wxComboBox *ratio_combo;
-
- char *psz_bands;
- float f_preamp;
- bool b_update;
- private:
- /* General layout */
- wxPanel *VideoPanel( wxWindow * );
- wxPanel *EqzPanel( wxWindow * );
- wxPanel *AudioPanel( wxWindow * );
- wxNotebook *notebook;
-
- /* Equalizer */
- wxCheckBox *eq_chkbox;
- wxCheckBox *eq_2p_chkbox;
- wxButton *eq_restoredefaults_button;
- wxSlider *smooth_slider;
- wxStaticText *smooth_text;
- wxSlider *preamp_slider;
- wxStaticText * preamp_text;
- int i_smooth;
- wxSlider *band_sliders[10];
- wxStaticText *band_texts[10];
- int i_values[10];
-
- void OnEnableEqualizer( wxCommandEvent& );
- void OnRestoreDefaults( wxCommandEvent& );
- void OnChangeEqualizer( wxScrollEvent& );
- void OnEqSmooth( wxScrollEvent& );
- void OnPreamp( wxScrollEvent& );
- void OnEq2Pass( wxCommandEvent& );
- void OnEqRestore( wxCommandEvent& );
-
- /* Video */
- void OnEnableAdjust( wxCommandEvent& );
- void OnAdjustUpdate( wxScrollEvent& );
- void OnRatio( wxCommandEvent& );
- void OnFiltersInfo( wxCommandEvent& );
- void OnSelectFilter( wxCommandEvent& );
-
- /* Audio */
- void OnHeadphone( wxCommandEvent& );
- void OnNormvol( wxCommandEvent& );
- void OnNormvolSlider( wxScrollEvent& );
-
- void CheckAout();
- void OnIdle( wxIdleEvent& );
-
- DECLARE_EVENT_TABLE();
-
- intf_thread_t *p_intf;
- bool b_my_update;
- wxWindow *p_parent;
- };
-};
-#if 0
-/* Extended Window */
-class ExtraWindow: public wxFrame
-{
-public:
- /* Constructor */
- ExtraWindow( intf_thread_t *p_intf, wxWindow *p_parent, wxPanel *panel );
- virtual ~ExtraWindow();
-
-private:
-
- wxPanel *panel;
-
- DECLARE_EVENT_TABLE();
-
- intf_thread_t *p_intf;
-};
-#endif
-
-#endif
+++ /dev/null
-/*****************************************************************************
- * slider_manager.cpp : Manage an input slider
- *****************************************************************************
- * Copyright (C) 2000-2005 the VideoLAN team
- * $Id$
- *
- * Authors: Gildas Bazin <gbazin@videolan.org>
- * Clément Stenac <zorglub@videolan.org>
- *
- * 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., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
- *****************************************************************************/
-
-#include "input_manager.hpp"
-#include "interface.hpp"
-#include "video.hpp"
-
-#include <vlc_meta.h>
-
-/* include the toolbar graphics */
-#include "bitmaps/prev.xpm"
-#include "bitmaps/next.xpm"
-#include "bitmaps/playlist.xpm"
-
-/* IDs for the controls */
-enum
-{
- SliderScroll_Event = wxID_HIGHEST,
-
- DiscMenu_Event,
- DiscPrev_Event,
- DiscNext_Event
-};
-
-BEGIN_EVENT_TABLE(InputManager, wxPanel)
- /* Slider events */
- EVT_COMMAND_SCROLL(SliderScroll_Event, InputManager::OnSliderUpdate)
-
- /* Disc Buttons events */
- EVT_BUTTON(DiscMenu_Event, InputManager::OnDiscMenu)
- EVT_BUTTON(DiscPrev_Event, InputManager::OnDiscPrev)
- EVT_BUTTON(DiscNext_Event, InputManager::OnDiscNext)
-
-END_EVENT_TABLE()
-
-#define STATUS_STOP 0
-#define STATUS_PLAYING 1
-#define STATUS_PAUSE 2
-
-#ifdef WIN32
-
-#include <commctrl.h>
-
-/*
-** On win32, clicking on the slider channel causes the thumb to jump up or down a page size
-** like a scrollbar. This is not particularily useful for a movie track, where we'd rather
-** see the thumb to jump where the mouse is.
-** Therefore, we replace the slider (TRACKBAR control) window proc with our, which intercept
-** the mouse down event, and move the thumb accordingly
-*/
-static LRESULT CALLBACK MovieSliderWindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
-{
- switch( uMsg )
- {
- case WM_LBUTTONDOWN:
- {
- POINT click = { GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam) };
- RECT tRect = {0, 0, 0, 0};
- SendMessage(hWnd, TBM_GETTHUMBRECT, 0, (LPARAM)&tRect);
-
- /* check whether click is not in thumb */
- if( ! PtInRect(&tRect, click) )
- {
- LONG min = SendMessage(hWnd, TBM_GETRANGEMIN, 0, 0);
- LONG max = SendMessage(hWnd, TBM_GETRANGEMAX, 0, 0);
- LONG thumb = tRect.right-tRect.left;
- LONG newpos;
-
- SendMessage(hWnd, TBM_GETCHANNELRECT, 0, (LPARAM)&tRect);
-
- /* following is only valid for horizontal a trackbar */
- newpos = ((click.x-tRect.left-(thumb/2))*(max-min)+((tRect.right-tRect.left-thumb)/2))
- /(tRect.right-tRect.left-thumb);
-
- /* set new postion */
- SendMessage(hWnd, TBM_SETPOS, TRUE, min+newpos);
- /* notify parent of change */
- SendMessage(GetParent(hWnd), WM_HSCROLL, TB_ENDTRACK, (LPARAM)hWnd);
-
- return 0;
- }
- }
-
- default:
- return CallWindowProc((WNDPROC)GetWindowLongPtr(hWnd, GWLP_USERDATA),
- hWnd, uMsg, wParam, lParam);
- }
-}
-
-#endif
-
-/*****************************************************************************
- * Constructor.
- *****************************************************************************/
-InputManager::InputManager( intf_thread_t *_p_intf, Interface *_p_main_intf,
- wxWindow *p_parent )
- : wxPanel( p_parent )
-{
- p_intf = _p_intf;
- p_main_intf = _p_main_intf;
- p_input = NULL;
- i_old_playing_status = STATUS_STOP;
- i_old_rate = INPUT_RATE_DEFAULT;
- b_slider_free = true;
- i_input_hide_delay = 0;
-
- /* Create slider */
- slider = new wxSlider( this, SliderScroll_Event, 0, 0, SLIDER_MAX_POS );
-
-#ifdef WIN32
- /* modify behaviour of WIN32 underlying control
- in order to implement proper movie slider */
- {
- HWND sliderHwnd = (HWND)slider->GetHWND();
- /* put original WNDPROC into USERDATA, this may be incompatible with future version of
- wxwidgets. */
- SetWindowLongPtr(sliderHwnd, GWLP_USERDATA,
- (LONG_PTR)GetWindowLongPtr(sliderHwnd, GWLP_WNDPROC));
- /* put our own WNDPROC */
- SetWindowLongPtr(sliderHwnd, GWLP_WNDPROC, (LONG_PTR)MovieSliderWindowProc);
- }
-#endif
-
- /* Create disc buttons */
- disc_frame = new wxPanel( this );
-
- disc_menu_button = new wxBitmapButton( disc_frame, DiscMenu_Event,
- wxBitmap( playlist_xpm ) );
- disc_prev_button = new wxBitmapButton( disc_frame, DiscPrev_Event,
- wxBitmap( prev_xpm ) );
- disc_next_button = new wxBitmapButton( disc_frame, DiscNext_Event,
- wxBitmap( next_xpm ) );
-
- disc_sizer = new wxBoxSizer( wxHORIZONTAL );
- disc_sizer->Add( disc_menu_button, 1, wxEXPAND | wxLEFT | wxRIGHT, 1 );
- disc_sizer->Add( disc_prev_button, 1, wxEXPAND | wxLEFT | wxRIGHT, 1 );
- disc_sizer->Add( disc_next_button, 1, wxEXPAND | wxLEFT | wxRIGHT, 1 );
- disc_frame->SetSizer( disc_sizer );
- disc_sizer->Layout();
-
- /* Add everything to the panel */
- sizer = new wxBoxSizer( wxHORIZONTAL );
- SetSizer( sizer );
- sizer->Add( slider, 1, wxEXPAND | wxALL, 5 );
- sizer->Add( disc_frame, 0, wxALL, 2 );
-
- /* Hide by default */
- sizer->Hide( disc_frame );
- sizer->Hide( slider );
-
- sizer->Layout();
- Fit();
-}
-
-InputManager::~InputManager()
-{
- vlc_mutex_lock( &p_intf->change_lock );
- if( p_intf->p_sys->p_input ) vlc_object_release( p_intf->p_sys->p_input );
- p_intf->p_sys->p_input = NULL;
- vlc_mutex_unlock( &p_intf->change_lock );
-}
-
-/*****************************************************************************
- * Public methods.
- *****************************************************************************/
-bool InputManager::IsPlaying()
-{
- return (p_input && vlc_object_alive (p_input));
-}
-
-/*****************************************************************************
- * Private methods.
- *****************************************************************************/
-void InputManager::UpdateInput()
-{
- playlist_t *p_playlist = pl_Hold( p_intf );
- if( p_playlist != NULL )
- {
- LockPlaylist( p_intf->p_sys, p_playlist );
- p_input = p_intf->p_sys->p_input = p_playlist->p_input;
- if( p_intf->p_sys->p_input )
- vlc_object_hold( p_intf->p_sys->p_input );
- UnlockPlaylist( p_intf->p_sys, p_playlist );
- pl_Release( p_intf );
- }
-}
-
-void InputManager::UpdateNowPlaying()
-{
- char *psz_now_playing = input_item_GetNowPlaying( input_GetItem(p_input) );
- if( psz_now_playing && *psz_now_playing )
- {
- p_main_intf->statusbar->SetStatusText(
- wxString(wxU(psz_now_playing)) + wxT( " - " ) +
- wxU(input_GetItem(p_input)->psz_name), 2 );
- }
- else
- {
- p_main_intf->statusbar->SetStatusText(
- wxU(input_GetItem(p_input)->psz_name), 2 );
- }
- free( psz_now_playing );
-}
-
-void InputManager::UpdateButtons( bool b_play )
-{
- if( !b_play )
- {
- if( i_old_playing_status == STATUS_STOP ) return;
-
- i_old_playing_status = STATUS_STOP;
- p_main_intf->TogglePlayButton( PAUSE_S );
- p_main_intf->statusbar->SetStatusText( wxT(""), 0 );
- p_main_intf->statusbar->SetStatusText( wxT(""), 2 );
-
-/* wxCocoa pretends to support this, but at least 2.6.x doesn't */
-#ifndef __APPLE__
-#ifdef wxHAS_TASK_BAR_ICON
- if( p_main_intf->p_systray )
- {
- p_main_intf->p_systray->UpdateTooltip(
- wxString(wxT("VLC media player - ")) + wxU(_("Stopped")) );
- }
-#endif
-#endif
-
- return;
- }
-
- /* Manage Playing status */
- vlc_value_t val;
- var_Get( p_input, "state", &val );
- val.i_int = val.i_int == PAUSE_S ? STATUS_PAUSE : STATUS_PLAYING;
- if( i_old_playing_status != val.i_int )
- {
- i_old_playing_status = val.i_int;
- p_main_intf->TogglePlayButton( val.i_int == STATUS_PAUSE ?
- PAUSE_S : PLAYING_S );
-
-/* wxCocoa pretends to support this, but at least 2.6.x doesn't */
-#ifndef __APPLE__
-#ifdef wxHAS_TASK_BAR_ICON
- if( p_main_intf->p_systray )
- {
- p_main_intf->p_systray->UpdateTooltip(
- wxU(input_GetItem(p_input)->psz_name) + wxString(wxT(" - ")) +
- (val.i_int == PAUSE_S ? wxU(_("Paused")) : wxU(_("Playing"))));
- }
-#endif
-#endif
- }
-}
-
-void InputManager::UpdateDiscButtons()
-{
- vlc_value_t val;
- var_Change( p_input, "title", VLC_VAR_CHOICESCOUNT, &val, NULL );
- if( val.i_int > 0 && !disc_frame->IsShown() )
- {
- vlc_value_t val;
-
- #define HELP_MENU N_("Menu")
- #define HELP_PCH N_("Previous chapter")
- #define HELP_NCH N_("Next chapter")
- #define HELP_PTR N_("Previous track")
- #define HELP_NTR N_("Next track")
-
- var_Change( p_input, "chapter", VLC_VAR_CHOICESCOUNT, &val, NULL );
-
- if( val.i_int > 0 )
- {
- disc_menu_button->Show();
- disc_sizer->Show( disc_menu_button );
- disc_sizer->Layout();
- disc_sizer->Fit( disc_frame );
- disc_menu_button->SetToolTip( wxU(_( HELP_MENU ) ) );
- disc_prev_button->SetToolTip( wxU(_( HELP_PCH ) ) );
- disc_next_button->SetToolTip( wxU(_( HELP_NCH ) ) );
- }
- else
- {
- disc_menu_button->Hide();
- disc_sizer->Hide( disc_menu_button );
- disc_prev_button->SetToolTip( wxU(_( HELP_PTR ) ) );
- disc_next_button->SetToolTip( wxU(_( HELP_NTR ) ) );
- }
-
- ShowDiscFrame();
- }
- else if( val.i_int == 0 && disc_frame->IsShown() )
- {
- HideDiscFrame();
- }
-}
-
-void InputManager::HideSlider()
-{
- ShowSlider( false );
-}
-
-void InputManager::HideDiscFrame()
-{
- ShowDiscFrame( false );
-}
-
-void InputManager::UpdateTime()
-{
- char psz_time[ MSTRTIME_MAX_SIZE ], psz_total[ MSTRTIME_MAX_SIZE ];
- mtime_t i_seconds;
-
- i_seconds = var_GetTime( p_intf->p_sys->p_input, "length" ) / 1000000;
- secstotimestr( psz_total, i_seconds );
-
- i_seconds = var_GetTime( p_intf->p_sys->p_input, "time" ) / 1000000;
- secstotimestr( psz_time, i_seconds );
-
- p_main_intf->statusbar->SetStatusText(
- wxU(psz_time) + wxString(wxT(" / ")) +wxU(psz_total), 0 );
-}
-
-void InputManager::Update()
-{
- /* Update the input */
- if( p_input == NULL )
- {
- UpdateInput();
-
- if( p_input )
- {
- slider->SetValue( 0 );
- }
- else if( !i_input_hide_delay )
- {
- i_input_hide_delay = mdate() + 200000;
- }
- else if( i_input_hide_delay < mdate() )
- {
- if( disc_frame->IsShown() ) HideDiscFrame();
- if( slider->IsShown() ) HideSlider();
- i_input_hide_delay = 0;
- }
- }
- else if( p_input->b_dead )
- {
- UpdateButtons( false );
- vlc_object_release( p_input );
- p_input = NULL;
- }
- else
- {
- i_input_hide_delay = 0;
- }
-
- if( p_input && vlc_object_alive (p_input) )
- {
- vlc_value_t pos, len;
-
- UpdateTime();
- UpdateButtons( true );
- UpdateNowPlaying();
- UpdateDiscButtons();
-
- /* Really manage the slider */
- var_Get( p_input, "position", &pos );
- var_Get( p_input, "length", &len );
-
- if( pos.f_float > 0 && !slider->IsShown() ) ShowSlider();
- else if( pos.f_float <= 0 && slider->IsShown() ) HideSlider();
-
- /* Update the slider if the user isn't dragging it. */
- if( slider->IsShown() && b_slider_free )
- {
- i_slider_pos = (int)(SLIDER_MAX_POS * pos.f_float);
- slider->SetValue( i_slider_pos );
- }
-
- /* Manage Speed status */
- vlc_value_t val;
- var_Get( p_input, "rate", &val );
- if( i_old_rate != val.i_int )
- {
- p_main_intf->statusbar->SetStatusText(
- wxString::Format(wxT("x%.2f"),
- (float)INPUT_RATE_DEFAULT / val.i_int ), 1 );
- i_old_rate = val.i_int;
- }
- }
-}
-
-/*****************************************************************************
- * Event Handlers.
- *****************************************************************************/
-void InputManager::OnDiscMenu( wxCommandEvent& WXUNUSED(event) )
-{
- input_thread_t *p_input =
- (input_thread_t *)vlc_object_find( p_intf, VLC_OBJECT_INPUT,
- FIND_ANYWHERE );
- if( p_input )
- {
- vlc_value_t val; val.i_int = 2;
-
- var_Set( p_input, "title 0", val);
- vlc_object_release( p_input );
- }
-}
-
-void InputManager::OnDiscPrev( wxCommandEvent& WXUNUSED(event) )
-{
- input_thread_t *p_input =
- (input_thread_t *)vlc_object_find( p_intf, VLC_OBJECT_INPUT,
- FIND_ANYWHERE );
- if( p_input )
- {
- int i_type = var_Type( p_input, "prev-chapter" );
- vlc_value_t val; val.b_bool = true;
-
- var_Set( p_input, ( i_type & VLC_VAR_TYPE ) != 0 ?
- "prev-chapter" : "prev-title", val );
-
- vlc_object_release( p_input );
- }
-}
-
-void InputManager::OnDiscNext( wxCommandEvent& WXUNUSED(event) )
-{
- input_thread_t *p_input =
- (input_thread_t *)vlc_object_find( p_intf, VLC_OBJECT_INPUT,
- FIND_ANYWHERE );
- if( p_input )
- {
- int i_type = var_Type( p_input, "next-chapter" );
- vlc_value_t val; val.b_bool = true;
-
- var_Set( p_input, ( i_type & VLC_VAR_TYPE ) != 0 ?
- "next-chapter" : "next-title", val );
-
- vlc_object_release( p_input );
- }
-}
-
-void InputManager::OnSliderUpdate( wxScrollEvent& event )
-{
- vlc_mutex_lock( &p_intf->change_lock );
-
-#ifdef WIN32
- if( event.GetEventType() == wxEVT_SCROLL_THUMBRELEASE
- || event.GetEventType() == wxEVT_SCROLL_ENDSCROLL )
- {
-#endif
- if( i_slider_pos != event.GetPosition() && p_intf->p_sys->p_input )
- {
- vlc_value_t pos;
- pos.f_float = (float)event.GetPosition() / (float)SLIDER_MAX_POS;
- var_Set( p_intf->p_sys->p_input, "position", pos );
- }
-
-#ifdef WIN32
- b_slider_free = true;
- }
- else
- {
- b_slider_free = false;
- if( p_intf->p_sys->p_input ) UpdateTime();
- }
-#endif
-
-#undef WIN32
- vlc_mutex_unlock( &p_intf->change_lock );
-}
-
-void InputManager::ShowSlider( bool show )
-{
- if( !!show == !!slider->IsShown() ) return;
-
- UpdateVideoWindow( p_intf, p_main_intf->video_window );
-
- sizer->Show( slider, show );
- sizer->Layout();
-
- wxCommandEvent intf_event( wxEVT_INTF, 0 );
- p_main_intf->AddPendingEvent( intf_event );
-}
-
-void InputManager::ShowDiscFrame( bool show )
-{
- if( !!show == !!disc_frame->IsShown() ) return;
-
- UpdateVideoWindow( p_intf, p_main_intf->video_window );
-
- sizer->Show( disc_frame, show );
- sizer->Layout();
-
- wxCommandEvent intf_event( wxEVT_INTF, 0 );
- p_main_intf->AddPendingEvent( intf_event );
-}
+++ /dev/null
-/*****************************************************************************
- * input_manager.hpp: Header for input_manager
- *****************************************************************************
- * Copyright (C) 1999-2005 the VideoLAN team
- * $Id$
- *
- * Authors: Gildas Bazin <gbazin@videolan.org>
- * Clément Stenac <zorglub@videolan.org>
- *
- * 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., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
- *****************************************************************************/
-
-#ifndef _INPUT_MANAGER_H_
-#define _INPUT_MANAGER_H_
-
-#include "wxwidgets.hpp"
-
-namespace wxvlc
-{
- class Interface;
-
- /**
- * This class manages all the controls related to the input
- */
- class InputManager : public wxPanel
- {
- public:
- InputManager( intf_thread_t *, Interface *, wxWindow * );
- virtual ~InputManager();
-
- void Update();
- bool IsPlaying();
-
- protected:
- void UpdateInput();
- void UpdateNowPlaying();
- void UpdateButtons( bool );
- void UpdateDiscButtons();
- void UpdateTime();
-
- void HideSlider();
- void ShowSlider( bool show = true );
-
- void OnSliderUpdate( wxScrollEvent& event );
-
- void OnDiscMenu( wxCommandEvent& event );
- void OnDiscPrev( wxCommandEvent& event );
- void OnDiscNext( wxCommandEvent& event );
-
- void HideDiscFrame();
- void ShowDiscFrame( bool show = true );
-
- wxPanel *disc_frame;
- wxBoxSizer *disc_sizer;
- wxBitmapButton *disc_menu_button;
- wxBitmapButton *disc_prev_button;
- wxBitmapButton *disc_next_button;
-
- intf_thread_t * p_intf;
- input_thread_t *p_input;
- Interface * p_main_intf;
-
- wxSlider *slider; ///< Slider for this input
- int i_slider_pos; ///< Current slider position
- bool b_slider_free; ///< Slider status
-
- wxBoxSizer *sizer;
-
- private:
- DECLARE_EVENT_TABLE();
-
- int i_old_playing_status; ///< Previous playing status
- int i_old_rate; ///< Previous playing rate
-
- mtime_t i_input_hide_delay; ///< Allows delaying slider hidding
- };
-};
-
-#endif
+++ /dev/null
-/*****************************************************************************
- * interface.cpp : wxWidgets plugin for vlc
- *****************************************************************************
- * Copyright (C) 2000-2006 the VideoLAN team
- * $Id$
- *
- * Authors: Gildas Bazin <gbazin@videolan.org>
- *
- * 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., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
- *****************************************************************************/
-
-/*****************************************************************************
- * Preamble
- *****************************************************************************/
-#include "interface.hpp"
-#include "playlist_manager.hpp"
-#include "extrapanel.hpp"
-#include "timer.hpp"
-#include "video.hpp"
-#include <vlc_keys.h>
-
-#include "vlc_charset.h"
-
-#include <vlc_aout.h>
-#include "vlc_charset.h"
-
-#include <vlc_interface.h>
-
-#include <wx/splitter.h>
-
-#include <wx/utils.h> /* wxLaunchDefaultBrowser() */
-
-/* include the toolbar graphics */
-#include "bitmaps/play.xpm"
-#include "bitmaps/pause.xpm"
-#include "bitmaps/stop.xpm"
-#include "bitmaps/prev.xpm"
-#include "bitmaps/next.xpm"
-#include "bitmaps/eject.xpm"
-#include "bitmaps/slow.xpm"
-#include "bitmaps/fast.xpm"
-#include "bitmaps/playlist.xpm"
-#include "bitmaps/playlist_small.xpm"
-#include "bitmaps/speaker.xpm"
-#include "bitmaps/speaker_mute.xpm"
-
-#define TOOLBAR_BMP_WIDTH 16
-#define TOOLBAR_BMP_HEIGHT 16
-
-/* include the icon graphic */
-#include "../../../share/vlc32x32.xpm"
-/* include a small icon graphic for the systray icon */
-#ifdef wxHAS_TASK_BAR_ICON
-#include "../../../share/vlc16x16.xpm"
-#endif
-
-/*****************************************************************************
- * Local prototypes
- *****************************************************************************/
- static int InteractCallback( vlc_object_t *, const char *, vlc_value_t,
- vlc_value_t, void *);
-
-/*****************************************************************************
- * Local class declarations.
- *****************************************************************************/
-class wxMenuExt: public wxMenu
-{
-public:
- /* Constructor */
- wxMenuExt( wxMenu* parentMenu, int id, const wxString& text,
- const wxString& helpString, wxItemKind kind,
- char *_psz_var, int _i_object_id, vlc_value_t _val,
- int _i_val_type );
-
- virtual ~wxMenuExt() {};
-
- char *psz_var;
- int i_val_type;
- int i_object_id;
- vlc_value_t val;
-
-private:
-
-};
-
-class Splitter : public wxSplitterWindow
-{
-public:
- Splitter( wxWindow *p_parent, intf_thread_t *_p_intf )
- : wxSplitterWindow( p_parent, -1, wxDefaultPosition, wxSize(0,0),
-#if defined( __WXMSW__ )
- wxCLIP_CHILDREN ),
-#else
- wxCLIP_CHILDREN | wxSP_3DSASH ),
-#endif
- p_intf(_p_intf), b_video(0), i_delay(0)
- {
- SetSashSize( 0 );
-
- wxSize size = wxSize(-1, 150);
- wxPoint p = wxPoint(0,0);
- bool b_dummy;
- WindowSettings *ws = p_intf->p_sys->p_window_settings;
- ws->GetSettings( WindowSettings::ID_SMALL_PLAYLIST, b_dummy, p, size );
-
- i_width = size.GetWidth();
- i_sash_position = size.GetHeight();
- b_show_on_start = !!p.x;
- }
-
- virtual ~Splitter()
- {
- WindowSettings *ws = p_intf->p_sys->p_window_settings;
- ws->SetSettings( WindowSettings::ID_SMALL_PLAYLIST, true,
- wxPoint(!!GetWindow2(),0),
- wxSize(i_width, i_sash_position) );
- };
-
- virtual bool Split( wxWindow* window1, wxWindow* window2 )
- {
- SetSashSize( 0 );
- wxSize size = wxSize( i_width, i_sash_position );
- if( window2->GetSizer() ) window2->GetSizer()->SetMinSize( size );
-
- return wxSplitterWindow::SplitHorizontally( window1, window2,
- -i_sash_position );
- }
-
- virtual bool Unsplit( wxWindow* window )
- {
- SetSashSize( 0 );
- return wxSplitterWindow::Unsplit( window );
- }
-
- bool ShowOnStart() { return b_show_on_start; }
-
-private:
- DECLARE_EVENT_TABLE()
-
- void OnSize( wxSizeEvent &event )
- {
- /* If we display video, then resize the video window */
- if( GetWindow2() &&
- p_intf->p_sys->p_video_window && p_intf->p_sys->p_video_sizer &&
- p_intf->p_sys->p_video_sizer->GetMinSize() != wxSize(0,0) )
- {
- if( !b_video ) i_delay = mdate() + 1000000;
- b_video = true;
-
- SetSashSize( -1 );
-
-#if defined( __WXMSW__ )
- SetSashPosition( event.GetSize().GetHeight() - i_sash_position );
-#else
- SetSashPosition( event.GetSize().GetHeight() -
- i_sash_position - GetSashSize() );
-#endif
- }
- else if( GetWindow2() && GetWindow1() && GetWindow1()->GetSizer() )
- {
- wxSize size = GetWindow1()->GetSizer()->GetMinSize();
-
- if( b_video ) i_delay = mdate() + 1000000;
- b_video = false;
-
- if( event.GetSize().GetHeight() - size.GetHeight() )
- {
- SetSashSize( 0 );
-
- SetSashPosition( size.GetHeight() ? size.GetHeight() : 1 );
-
- if( i_delay < mdate() )
- {
- i_sash_position = event.GetSize().GetHeight() -
- size.GetHeight();
- i_width = event.GetSize().GetWidth();
-
- size = wxSize( i_width, i_sash_position );
- if( GetWindow2()->GetSizer() )
- GetWindow2()->GetSizer()->SetMinSize( size );
- }
- }
- }
-
- event.Skip();
- }
-
- void OnSashPosChanged( wxSplitterEvent &event )
- {
- if( !GetSize().GetHeight() ){ event.Skip(); return; }
-
- if( i_delay < mdate() )
- {
- i_sash_position = GetSize().GetHeight() - event.GetSashPosition();
-
- wxSize size = wxSize( i_width, i_sash_position );
- if( GetWindow2()->GetSizer() )
- GetWindow2()->GetSizer()->SetMinSize( size );
- }
- event.Skip();
- }
-
- intf_thread_t *p_intf;
- int i_sash_position;
- int i_width;
- bool b_video;
- mtime_t i_delay;
- bool b_show_on_start;
-};
-
-BEGIN_EVENT_TABLE(Splitter, wxSplitterWindow)
- EVT_SIZE( Splitter::OnSize )
- EVT_SPLITTER_SASH_POS_CHANGED(-1, Splitter::OnSashPosChanged)
-END_EVENT_TABLE()
-
-/*****************************************************************************
- * Event Table.
- *****************************************************************************/
-
-DEFINE_LOCAL_EVENT_TYPE( wxEVT_INTF );
-
-/* IDs for the controls and the menu commands */
-enum
-{
- /* menu items */
- MenuDummy_Event = wxID_HIGHEST + 1000,
- Exit_Event = wxID_HIGHEST,
- OpenFileSimple_Event,
- OpenAdv_Event,
- OpenFile_Event,
- OpenDir_Event,
- OpenDisc_Event,
- OpenNet_Event,
- OpenCapture_Event,
- OpenSat_Event,
- OpenOther_Event,
- EjectDisc_Event,
-
- Wizard_Event,
-
- Playlist_Event,
- PlaylistSmall_Event,
- Logs_Event,
- FileInfo_Event,
-
- Prefs_Event,
- Extended_Event,
- Bookmarks_Event,
- Skins_Event,
-
- StopStream_Event,
- PlayStream_Event,
- PrevStream_Event,
- NextStream_Event,
- SlowStream_Event,
- FastStream_Event,
- ToggleMute_Event,
- SlideVolume_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,
- OnWebLink_Event,
- OnWebHelp_Event,
-#ifdef UPDATE_CHECK
- UpdateVLC_Event,
-#endif
- //VLM_Event,
-
- Iconize_Event,
-};
-
-DEFINE_LOCAL_EVENT_TYPE( wxEVT_INTERACTION );
-
-BEGIN_EVENT_TABLE(Interface, wxFrame)
- /* Menu events */
- EVT_MENU(Exit_Event, Interface::OnExit)
- EVT_MENU(About_Event, Interface::OnAbout)
- EVT_MENU(OnWebLink_Event, Interface::OnWebLink)
- EVT_MENU(OnWebHelp_Event, Interface::OnWebHelp)
-#ifdef UPDATE_CHECK
- EVT_MENU(UpdateVLC_Event, Interface::OnShowDialog)
-#endif
- //EVT_MENU(VLM_Event, Interface::OnShowDialog)
-
- EVT_MENU(Playlist_Event, Interface::OnShowDialog)
- EVT_MENU(PlaylistSmall_Event, Interface::OnSmallPlaylist)
- EVT_MENU(Logs_Event, Interface::OnShowDialog)
- EVT_MENU(FileInfo_Event, Interface::OnShowDialog)
- EVT_MENU(Prefs_Event, Interface::OnShowDialog)
-
- EVT_MENU_OPEN(Interface::OnMenuOpen)
-
- EVT_MENU( Extended_Event, Interface::OnExtended )
-
- EVT_MENU( Bookmarks_Event, Interface::OnShowDialog)
-
-#if defined( __WXMSW__ ) || defined( __WXMAC__ )
- EVT_CONTEXT_MENU(Interface::OnContextMenu2)
-#endif
- EVT_RIGHT_UP(Interface::OnContextMenu)
-
- /* Toolbar events */
- EVT_MENU(OpenFileSimple_Event, Interface::OnShowDialog)
- EVT_MENU(OpenAdv_Event, Interface::OnShowDialog)
- EVT_MENU(OpenFile_Event, Interface::OnShowDialog)
- EVT_MENU(OpenDir_Event, Interface::OnShowDialog)
- EVT_MENU(OpenDisc_Event, Interface::OnShowDialog)
- EVT_MENU(OpenNet_Event, Interface::OnShowDialog)
- EVT_MENU(OpenCapture_Event, Interface::OnShowDialog)
- EVT_MENU(OpenSat_Event, Interface::OnShowDialog)
- EVT_MENU(Wizard_Event, Interface::OnShowDialog)
- EVT_MENU(StopStream_Event, Interface::OnStopStream)
- EVT_MENU(PlayStream_Event, Interface::OnPlayStream)
- EVT_MENU(PrevStream_Event, Interface::OnPrevStream)
- EVT_MENU(NextStream_Event, Interface::OnNextStream)
- EVT_MENU(SlowStream_Event, Interface::OnSlowStream)
- EVT_MENU(FastStream_Event, Interface::OnFastStream)
- EVT_MENU(ToggleMute_Event, Interface::OnToggleMute)
- EVT_COMMAND_SCROLL(SlideVolume_Event, Interface::OnSlideVolume)
-
- /* Custom events */
- EVT_COMMAND(0, wxEVT_INTF, Interface::OnControlEvent)
- EVT_COMMAND(1, wxEVT_INTF, Interface::OnControlEvent)
-
- EVT_COMMAND( -1, wxEVT_INTERACTION, Interface::OnInteraction )
-END_EVENT_TABLE()
-
-/*****************************************************************************
- * Constructor.
- *****************************************************************************/
-Interface::Interface( intf_thread_t *_p_intf, long style ):
- wxFrame( NULL, -1, wxT("VLC media player"),
- wxDefaultPosition, wxSize(700,100), style )
-{
- /* Initializations */
- p_intf = _p_intf;
- b_extra = false;
- extra_frame = 0;
- playlist_manager = 0;
- i_update_counter = 0;
-
-
- /* Give our interface a nice little icon */
- SetIcon( wxIcon( (const char**) vlc_xpm ) );
-
- /* Create a splitter window that will fill in the interface window.
- * We need a splitter bar in order to make the embedded playlist
- * resizable. */
- splitter = new Splitter( this, p_intf );
- main_sizer = new wxBoxSizer( wxVERTICAL );
- main_sizer->Add( splitter, 1, wxEXPAND );
- SetSizer( main_sizer );
-
- /* Create a main panel that will fill in the interface window */
- main_panel = new wxPanel( splitter, -1, wxPoint(0,0), wxSize(0,0),
- wxCLIP_CHILDREN );
- main_panel->SetFocus();
-
-#if defined(__WXGTK20__) && wxCHECK_VERSION(2,5,6)
- /* As ugly as your butt! Please remove when wxWidgets 2.6 fixed their
- * Accelerators bug. */
- main_panel->m_imData = 0;
- m_imData = 0;
-#endif
-
- /* Create a sizer for the main frame */
- panel_sizer = new wxBoxSizer( wxVERTICAL );
- main_panel->SetSizer( panel_sizer );
-
- /* Put this in the splitter */
- splitter->Initialize( main_panel );
-
-/* wxCocoa pretends to support this, but at least 2.6.x doesn't */
-#ifndef __APPLE__
-#ifdef wxHAS_TASK_BAR_ICON
- /* Systray integration */
- p_systray = NULL;
- if( config_GetInt( p_intf, "wx-systray" ) )
- {
- p_systray = new Systray( this, p_intf );
- }
-#endif
-#endif
-
- /* Creation of the menu bar */
- CreateOurMenuBar();
-
- /* Creation of the tool bar */
- CreateOurToolBar();
-
- /* Creation of the status bar
- * Helptext for menu items and toolbar tools will automatically get
- * displayed here. */
- int i_status_width[3] = {150, 55, -1};
- statusbar = CreateStatusBar( 3 ); /* 2 fields */
- statusbar->SetStatusWidths( 3, i_status_width );
- statusbar->SetStatusText( wxString::Format(wxT("x%.2f"), 1.0), 1 );
-
- /* Get minimum window size to prevent user from glitching it */
- splitter->SetSizeHints( -1, 0 );
- panel_sizer->Layout(); panel_sizer->Fit( main_panel );
- main_sizer->Layout(); main_sizer->Fit( this );
- main_min_size = GetSize();
- /* FIXME HACK as far as i understan (i.e. not a lot) the toolbar
- * doesn't take the labels into account when it returns its size */
-
- if( config_GetInt(p_intf, "wx-labels") )
- {
- main_min_size.SetWidth(800);
- }
- splitter->SetSizeHints( -1, -1 );
-
- /* Video window */
- video_window = 0;
- if( config_GetInt( p_intf, "wx-embed" ) )
- {
- video_window = CreateVideoWindow( p_intf, main_panel );
- panel_sizer->Add( p_intf->p_sys->p_video_sizer, 1, wxEXPAND, 0 );
- }
-
- /* Creation of the input manager panel */
- input_manager = new InputManager( p_intf, this, main_panel );
- panel_sizer->Add( input_manager, 0, wxEXPAND , 0 );
-
- /* Layout everything */
- splitter->SetSizeHints( -1, 0 );
- panel_sizer->Layout(); panel_sizer->Fit( main_panel );
- main_sizer->Layout(); main_sizer->Fit( this );
- splitter->SetSizeHints( -1, -1 );
-
-#if wxUSE_DRAG_AND_DROP
- /* Associate drop targets with the main interface */
- SetDropTarget( new DragAndDrop( p_intf ) );
-#endif
-
- SetupHotkeys();
-
- /* Start timer */
- timer = new Timer( p_intf, this );
-
- /* Restore previous position / settings */
- WindowSettings *ws = p_intf->p_sys->p_window_settings;
- wxPoint p;
- wxSize s;
- bool b_shown;
-
- ws->SetScreen( wxSystemSettings::GetMetric( wxSYS_SCREEN_X ),
- wxSystemSettings::GetMetric( wxSYS_SCREEN_Y ) );
-
- if( ws->GetSettings( WindowSettings::ID_MAIN, b_shown, p, s ) ) Move( p );
-
- /* Show extended GUI if requested */
- wxCommandEvent dummy;
- if( config_GetInt( p_intf, "wx-extended" ) ) OnExtended( dummy );
-
- SetIntfMinSize();
-
- var_Create( p_intf, "interaction", VLC_VAR_ADDRESS );
- var_AddCallback( p_intf, "interaction", InteractCallback, this );
- p_intf->b_interaction = true;
-
- /* Show embedded playlist if requested */
- if( splitter->ShowOnStart() ) OnSmallPlaylist( dummy );
-}
-
-Interface::~Interface()
-{
- WindowSettings *ws = p_intf->p_sys->p_window_settings;
-
- if( !IsIconized() )
- {
- ws->SetSettings( WindowSettings::ID_MAIN, true,
- GetPosition(), GetSize() );
- }
-
- PopEventHandler(true);
-
- delete video_window;
-
-/* wxCocoa pretends to support this, but at least 2.6.x doesn't */
-#ifndef __APPLE__
-#ifdef wxHAS_TASK_BAR_ICON
- delete p_systray;
-#endif
-#endif
-
- p_intf->b_interaction = false;
- var_DelCallback( p_intf, "interaction", InteractCallback, this );
-
- delete p_intf->p_sys->p_wxwindow;
-
-
- /* Clean up */
- delete timer;
-}
-
-void Interface::Init()
-{
- /* Misc init */
- SetupHotkeys();
-}
-
-void Interface::Update()
-{
- /* Misc updates */
-
- if( playlist_manager ) playlist_manager->Update();
-
- i_update_counter++;
-}
-
-void Interface::OnControlEvent( wxCommandEvent& event )
-{
- switch( event.GetId() )
- {
- case 0:
- main_sizer->Layout();
- main_sizer->Fit( this );
- break;
-
- case 1:
- long i_style = GetWindowStyle();
- if( event.GetInt() ) i_style |= wxSTAY_ON_TOP;
- else i_style &= ~wxSTAY_ON_TOP;
- SetWindowStyle( i_style );
- break;
- }
-}
-
-/*****************************************************************************
- * Private methods.
- *****************************************************************************/
-void Interface::CreateOurMenuBar()
-{
- int minimal = config_GetInt( p_intf, "wx-minimal" );
-
- /* Create the "File" menu */
- wxMenu *file_menu = new wxMenu;
-
- if (!minimal)
- {
- file_menu->Append( OpenFileSimple_Event,
- wxU(_("Quick &Open File...\tCtrl-O")) );
-
- file_menu->AppendSeparator();
- file_menu->Append( OpenFile_Event, wxU(_("Open &File...\tCtrl-F")) );
- file_menu->Append( OpenDir_Event, wxU(_("Open Dir&ectory...\tCtrl-E")) );
- file_menu->Append( OpenDisc_Event, wxU(_("Open &Disc...\tCtrl-D")) );
- file_menu->Append( OpenNet_Event,
- wxU(_("Open &Network Stream...\tCtrl-N")) );
- file_menu->Append( OpenCapture_Event,
- wxU(_("Open C&apture Device...\tCtrl-A")) );
-
- file_menu->AppendSeparator();
- file_menu->Append( Wizard_Event, wxU(_("&Wizard...\tCtrl-W")) );
- file_menu->AppendSeparator();
- }
- file_menu->Append( Exit_Event, wxU(_("E&xit\tCtrl-X")) );
-
- /* Create the "View" menu */
- wxMenu *view_menu = new wxMenu;
- if (!minimal)
- {
- view_menu->Append( Playlist_Event, wxU(_("&Playlist...\tCtrl-P")) );
- }
- view_menu->Append( Logs_Event, wxU(_("&Messages...\tCtrl-M")) );
- view_menu->Append( FileInfo_Event,
- wxU(_("Stream and Media &Info...\tCtrl-I")) );
-#if 0
- view_menu->Append( VLM_Event,
- wxU(_("VLM Control...\tCtrl-V")) );
-#endif
-
- /* Create the "Auto-generated" menus */
- p_settings_menu = SettingsMenu( p_intf, this );
- p_audio_menu = AudioMenu( p_intf, this );
- p_video_menu = VideoMenu( p_intf, this );
- p_navig_menu = NavigMenu( p_intf, this );
-
- /* Create the "Help" menu */
- wxMenu *help_menu = new wxMenu;
- help_menu->Append( OnWebLink_Event, wxU(_("VideoLAN's Website")) );
- help_menu->Append( OnWebHelp_Event, wxU(_("Online Help")) );
- help_menu->AppendSeparator();
- help_menu->Append( About_Event, wxU(_("About...")) );
-#ifdef UPDATE_CHECK
- help_menu->AppendSeparator();
- help_menu->Append( UpdateVLC_Event, wxU(_("Check for Updates...")) );
-#endif
-
- /* Append the freshly created menus to the menu bar... */
- wxMenuBar *menubar = new wxMenuBar();
- menubar->Append( file_menu, wxU(_("&File")) );
- menubar->Append( view_menu, wxU(_("V&iew")) );
- menubar->Append( p_settings_menu, wxU(_("&Settings")) );
- menubar->Append( p_audio_menu, wxU(_("&Audio")) );
- menubar->Append( p_video_menu, wxU(_("&Video")) );
- menubar->Append( p_navig_menu, wxU(_("&Navigation")) );
- menubar->Append( help_menu, wxU(_("&Help")) );
-
- /* Attach the menu bar to the frame */
- SetMenuBar( menubar );
-
- /* Find out size of menu bar */
- int i_size = 0;
- for( unsigned int i = 0; i < menubar->GetMenuCount(); i++ )
- {
- int i_width, i_height;
- menubar->GetTextExtent( menubar->GetLabelTop(i), &i_width, &i_height );
- i_size += i_width +
-#if defined(__WXGTK__)
- 22 /* approximate margin */;
-#else
-#if (wxMAJOR_VERSION <= 2) && (wxMINOR_VERSION <= 5) && (wxRELEASE_NUMBER < 3)
- 4 /* approximate margin */;
-#else
- 18 /* approximate margin */;
-#endif
-#endif
- }
-
-/* Patch by zcot for menu wrapping */
-#if defined(WIN32)
- /* Find out size of msw menu bar */
- i_size = 0;
- SIZE sizing;
- HDC hdc = GetDC( NULL );
- for( unsigned int i = 0; i < menubar->GetMenuCount(); i++ )
- {
- GetTextExtentPoint32( hdc, menubar->GetLabelTop(i).c_str(),
- menubar->GetLabelTop(i).Length(), &sizing );
-
- // [ SM_CXDLGFRAME + pixels + textextent + pixels + SM_CXDLGFRAME ]
- i_size += sizing.cx + 2 + GetSystemMetrics( SM_CXDLGFRAME ) * 2;
- }
- ReleaseDC( NULL, hdc );
- i_size += GetSystemMetrics( SM_CXSIZEFRAME ) * 2 + 4;
-#endif
-/* End patch by zcot */
-
- panel_sizer->SetMinSize( i_size, -1 );
-
- /* Intercept all menu events in our custom event handler */
- PushEventHandler( new MenuEvtHandler( p_intf, this ) );
-
-#if wxUSE_DRAG_AND_DROP
- /* Associate drop targets with the menubar */
- menubar->SetDropTarget( new DragAndDrop( p_intf ) );
-#endif
-}
-
-void Interface::CreateOurToolBar()
-{
-#define HELP_OPEN N_("Open")
-#define HELP_STOP N_("Stop")
-#define HELP_PLAY N_("Play")
-#define HELP_PAUSE N_("Pause")
-#define HELP_PLO N_("Playlist")
-#define HELP_SPLO N_("Embedded playlist")
-#define HELP_PLP N_("Previous playlist item")
-#define HELP_PLN N_("Next playlist item")
-#define HELP_SLOW N_("Play slower")
-#define HELP_FAST N_("Play faster")
-#define HELP_VOL N_("Toggle mute/unmute of the audio")
-
-#define LABEL_OPEN N_("Open")
-#define LABEL_STOP N_("Stop")
-#define LABEL_PLAY N_("Play")
-#define LABEL_PAUSE N_("Pause")
-#define LABEL_PLO N_("Playlist")
-#define LABEL_SPLO N_("Embedded playlist")
-#define LABEL_PLP N_("Previous")
-#define LABEL_PLN N_("Next")
-#define LABEL_SLOW N_("Slower")
-#define LABEL_FAST N_("Faster")
-#define LABEL_VOL N_("Mute")
-
- int minimal = config_GetInt( p_intf, "wx-minimal" );
- bool label = config_GetInt( p_intf, "wx-labels" );
-
- wxLogNull LogDummy; /* Hack to suppress annoying log message on the win32
- * version because we don't include wx.rc */
-
- wxToolBar *toolbar =
- CreateToolBar( label?wxTB_HORIZONTAL | wxTB_FLAT |wxTB_TEXT:
- wxTB_HORIZONTAL | wxTB_FLAT );
-
- toolbar->SetToolBitmapSize( wxSize(TOOLBAR_BMP_WIDTH,TOOLBAR_BMP_HEIGHT) );
-
- if (!minimal)
- {
- toolbar->AddTool( OpenFile_Event, wxU(LABEL_OPEN),
- wxBitmap( eject_xpm ), wxU(_(HELP_OPEN)) );
- toolbar->AddSeparator();
- }
-
- wxToolBarToolBase *p_tool = toolbar->AddTool( PlayStream_Event, wxU(LABEL_PLAY),
- wxBitmap( play_xpm ), wxU(_(HELP_PLAY)), wxITEM_CHECK );
- p_tool->SetClientData( p_tool );
-
- if (!minimal)
- {
- toolbar->AddTool( StopStream_Event, wxU(LABEL_STOP), wxBitmap( stop_xpm ),
- wxU(_(HELP_STOP)) );
- toolbar->AddSeparator();
-
- toolbar->AddTool( PrevStream_Event, wxU(LABEL_PLP),
- wxBitmap( prev_xpm ), wxU(_(HELP_PLP)) );
- toolbar->AddTool( SlowStream_Event, wxU(LABEL_SLOW),
- wxBitmap( slow_xpm ), wxU(_(HELP_SLOW)) );
- toolbar->AddTool( FastStream_Event, wxU(LABEL_FAST),
- wxBitmap( fast_xpm ), wxU(_(HELP_FAST)) );
- toolbar->AddTool( NextStream_Event, wxU(LABEL_PLN), wxBitmap( next_xpm ),
- wxU(_(HELP_PLN)) );
- toolbar->AddSeparator();
- if( config_GetInt( p_intf, "wx-playlist-view" ) != 1 )
- toolbar->AddTool( Playlist_Event, wxU(LABEL_PLO),
- wxBitmap( playlist_xpm ), wxU(_(HELP_PLO)) );
- if( config_GetInt( p_intf, "wx-playlist-view" ) >= 1 )
- toolbar->AddTool( PlaylistSmall_Event, wxU(LABEL_SPLO),
- wxBitmap( playlist_small_xpm ), wxU(_(HELP_SPLO)) );
- }
-
- wxToolBarToolBase *v_tool = toolbar->AddTool( ToggleMute_Event,
- wxU(LABEL_VOL), wxBitmap( speaker_xpm ),
- wxU(_(HELP_VOL)), wxITEM_CHECK );
- v_tool->SetClientData( v_tool );
-
- wxSlider *v_gauge = new wxSlider(toolbar, SlideVolume_Event, 256, 0,
- AOUT_VOLUME_MAX, wxDefaultPosition,
- wxSize(64,TOOLBAR_BMP_HEIGHT), wxSL_HORIZONTAL);
- toolbar->AddControl(v_gauge);
-
- toolbar->Realize();
-
-#if wxUSE_DRAG_AND_DROP
- /* Associate drop targets with the toolbar */
- toolbar->SetDropTarget( new DragAndDrop( p_intf ) );
-#endif
-}
-
-static int ConvertHotkeyModifiers( int i_hotkey )
-{
- int i_accel_flags = 0;
- if( i_hotkey & KEY_MODIFIER_ALT ) i_accel_flags |= wxACCEL_ALT;
- if( i_hotkey & KEY_MODIFIER_CTRL ) i_accel_flags |= wxACCEL_CTRL;
- if( i_hotkey & KEY_MODIFIER_SHIFT ) i_accel_flags |= wxACCEL_SHIFT;
- if( !i_accel_flags ) i_accel_flags = wxACCEL_NORMAL;
- return i_accel_flags;
-}
-
-static int ConvertHotkey( int i_hotkey )
-{
- int i_key = i_hotkey & ~KEY_MODIFIER;
- if( i_key & KEY_ASCII ) return i_key & KEY_ASCII;
- else if( i_key & KEY_SPECIAL )
- {
- switch ( i_key )
- {
- case KEY_LEFT: return WXK_LEFT;
- case KEY_RIGHT: return WXK_RIGHT;
- case KEY_UP: return WXK_UP;
- case KEY_DOWN: return WXK_DOWN;
- case KEY_SPACE: return WXK_SPACE;
- case KEY_ENTER: return WXK_RETURN;
- case KEY_F1: return WXK_F1;
- case KEY_F2: return WXK_F2;
- case KEY_F3: return WXK_F3;
- case KEY_F4: return WXK_F4;
- case KEY_F5: return WXK_F5;
- case KEY_F6: return WXK_F6;
- case KEY_F7: return WXK_F7;
- case KEY_F8: return WXK_F8;
- case KEY_F9: return WXK_F9;
- case KEY_F10: return WXK_F10;
- case KEY_F11: return WXK_F11;
- case KEY_F12: return WXK_F12;
- case KEY_HOME: return WXK_HOME;
- case KEY_END: return WXK_END;
- case KEY_INSERT: return WXK_INSERT;
- case KEY_DELETE: return WXK_DELETE;
- case KEY_MENU: return WXK_MENU;
- case KEY_ESC: return WXK_ESCAPE;
- case KEY_PAGEUP: return WXK_PRIOR;
- case KEY_PAGEDOWN: return WXK_NEXT;
- case KEY_TAB: return WXK_TAB;
- case KEY_BACKSPACE: return WXK_BACK;
- }
- }
- return WXK_F24;
-}
-
-void Interface::SetupHotkeys()
-{
- struct libvlc_int_t::hotkey *p_hotkeys = p_intf->p_libvlc->p_hotkeys;
- int i_hotkeys;
-
- /* Count number of hoteys */
- for( i_hotkeys = 0; p_hotkeys[i_hotkeys].psz_action != NULL; i_hotkeys++ );
-
- p_intf->p_sys->i_first_hotkey_event = wxID_HIGHEST + 7000;
- p_intf->p_sys->i_hotkeys = i_hotkeys;
-
- wxAcceleratorEntry *p_entries = new wxAcceleratorEntry[i_hotkeys];
-
- /* Setup the hotkeys as accelerators */
- for( int i = 0; i < i_hotkeys; i++ )
- {
- int i_mod = ConvertHotkeyModifiers( p_hotkeys[i].i_key );
- int i_key = ConvertHotkey( p_hotkeys[i].i_key );
-
-#ifdef WIN32
- if( !(p_hotkeys[i].i_key & KEY_SPECIAL) && i_mod )
- i_key = toupper(i_key);
-#endif
-
- p_entries[i].Set( i_mod, i_key,
- p_intf->p_sys->i_first_hotkey_event + i );
- }
-
- wxAcceleratorTable accel( i_hotkeys, p_entries );
-
- if( !accel.Ok() )
- {
- msg_Err( p_intf, "invalid accelerator table" );
- }
- else
- {
- SetAcceleratorTable( accel );
- }
-
- delete [] p_entries;
-}
-
-void Interface::SetIntfMinSize()
-{
- wxSize ms = main_min_size;
-
- if( extra_frame && extra_frame->IsShown() )
- {
- ms.SetHeight( ms.GetHeight() + ext_min_size.GetHeight() );
- if( ext_min_size.GetWidth() > ms.GetWidth() )
- ms.SetWidth( ext_min_size.GetWidth() );
- }
-
- SetSizeHints( ms.GetWidth(), ms.GetHeight() );
-}
-
-/*****************************************************************************
- * Event Handlers.
- *****************************************************************************/
-void Interface::OnMenuOpen( wxMenuEvent& event )
-{
-#if defined( __WXMSW__ )
-# define GetEventObject GetMenu
-#endif
-
- if( event.GetEventObject() == p_settings_menu )
- {
- p_settings_menu = SettingsMenu( p_intf, this, p_settings_menu );
-
- /* Add static items */
- p_settings_menu->AppendCheckItem( Extended_Event,
- wxU(_("Extended &GUI\tCtrl-G") ) );
- if( b_extra ) p_settings_menu->Check( Extended_Event, TRUE );
- p_settings_menu->Append( Bookmarks_Event,
- wxU(_("&Bookmarks...\tCtrl-B") ) );
- p_settings_menu->Append( Prefs_Event,
- wxU(_("Preference&s...\tCtrl-S")) );
- }
-
- else if( event.GetEventObject() == p_audio_menu )
- {
- p_audio_menu = AudioMenu( p_intf, this, p_audio_menu );
- }
-
- else if( event.GetEventObject() == p_video_menu )
- {
- p_video_menu = VideoMenu( p_intf, this, p_video_menu );
- }
-
- else if( event.GetEventObject() == p_navig_menu )
- {
- p_navig_menu = NavigMenu( p_intf, this, p_navig_menu );
- }
-
-#if defined( __WXMSW__ )
-# undef GetEventObject
-#endif
-}
-
-#if defined( __WXMSW__ ) || defined( __WXMAC__ )
-void Interface::OnContextMenu2(wxContextMenuEvent& event)
-{
- /* Only show the context menu for the main interface */
- if( GetId() != event.GetId() )
- {
- event.Skip();
- return;
- }
-
- if( p_intf->p_sys->pf_show_dialog )
- p_intf->p_sys->pf_show_dialog( p_intf, INTF_DIALOG_POPUPMENU, 1, 0 );
-}
-#endif
-void Interface::OnContextMenu(wxMouseEvent& event)
-{
- if( p_intf->p_sys->pf_show_dialog )
- p_intf->p_sys->pf_show_dialog( p_intf, INTF_DIALOG_POPUPMENU, 1, 0 );
-}
-
-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( wxString(wxT("VLC media player " VERSION_MESSAGE)) +
- wxU(_(" (wxWidgets interface)\n\n")) +
- wxU(_("(c) " COPYRIGHT_YEARS " - the VideoLAN Team\n\n")) +
- wxU(_("Compiled by "))+ wxU(VLC_CompileBy())+ wxU("@") +
- wxU(VLC_CompileHost())+ wxT(".")+ wxU(VLC_CompileDomain())+ wxT(".\n") +
- wxU(_("Compiler: "))+ wxU(VLC_Compiler())+wxT( ".\n") +
- wxU(_("Based on Git commit: "))+wxU(VLC_Changeset())+wxT(".\n\n") +
-#ifdef __WXMSW__
- wxU( vlc_wraptext(LICENSE_MSG,WRAPCOUNT) ) + wxT("\n\n") +
-#else
- wxU( LICENSE_MSG ) + wxT("\n\n") +
-#endif
- wxU(_("The VideoLAN team <videolan@videolan.org>\n"
- "http://www.videolan.org/\n\n")) );
- wxMessageBox( msg, wxString::Format(wxU(_("About %s")),
- wxT("VLC media player")), wxOK | wxICON_INFORMATION, this );
-}
-
-void Interface::OnWebLink( wxCommandEvent& WXUNUSED(event) )
-{
- wxLaunchDefaultBrowser( wxU("http://videolan.org/") );
-}
-
-void Interface::OnWebHelp( wxCommandEvent& WXUNUSED(event) )
-{
- wxLaunchDefaultBrowser( wxU("http://videolan.org/doc/") );
-}
-
-void Interface::OnShowDialog( wxCommandEvent& event )
-{
- if( p_intf->p_sys->pf_show_dialog )
- {
- int i_id;
-
- switch( event.GetId() )
- {
- case OpenFileSimple_Event:
- i_id = INTF_DIALOG_FILE_SIMPLE;
- break;
- case OpenAdv_Event:
- i_id = INTF_DIALOG_FILE;
- break;
- case OpenFile_Event:
- i_id = INTF_DIALOG_FILE;
- break;
- case OpenDir_Event:
- i_id = INTF_DIALOG_DIRECTORY;
- break;
- case OpenDisc_Event:
- i_id = INTF_DIALOG_DISC;
- break;
- case OpenNet_Event:
- i_id = INTF_DIALOG_NET;
- break;
- case OpenCapture_Event:
- i_id = INTF_DIALOG_CAPTURE;
- break;
- case OpenSat_Event:
- i_id = INTF_DIALOG_SAT;
- break;
- case Playlist_Event:
- i_id = INTF_DIALOG_PLAYLIST;
- break;
- case Logs_Event:
- i_id = INTF_DIALOG_MESSAGES;
- break;
- case FileInfo_Event:
- i_id = INTF_DIALOG_FILEINFO;
- break;
- case Prefs_Event:
- i_id = INTF_DIALOG_PREFS;
- break;
- case Wizard_Event:
- i_id = INTF_DIALOG_WIZARD;
- break;
- case Bookmarks_Event:
- i_id = INTF_DIALOG_BOOKMARKS;
- break;
-#ifdef UPDATE_CHECK
- case UpdateVLC_Event:
- i_id = INTF_DIALOG_UPDATEVLC;
- break;
-#endif
-#if 0
- case VLM_Event:
- i_id = INTF_DIALOG_VLM;
- break;
-#endif
- default:
- i_id = INTF_DIALOG_FILE;
- break;
- }
-
- p_intf->p_sys->pf_show_dialog( p_intf, i_id, 1, 0 );
- }
-}
-
-void Interface::OnExtended( wxCommandEvent& WXUNUSED(event) )
-{
- UpdateVideoWindow( p_intf, video_window );
-
- if( !extra_frame )
- {
- /* Create the extra panel */
- extra_frame = new ExtraPanel( p_intf, main_panel );
- panel_sizer->Add( extra_frame, 0, wxEXPAND , 0 );
- ext_min_size = extra_frame->GetBestSize();
- }
-
- b_extra = !b_extra;
- panel_sizer->Show( extra_frame, b_extra );
-
- SetIntfMinSize();
- main_sizer->Layout();
- main_sizer->Fit( this );
-}
-
-void Interface::OnSmallPlaylist( wxCommandEvent& WXUNUSED(event) )
-{
- UpdateVideoWindow( p_intf, video_window );
-
- if( !playlist_manager )
- {
- /* Create the extra panel */
- playlist_manager = new PlaylistManager( p_intf, splitter );
- }
-
- if( !splitter->IsSplit() ) splitter->Split( main_panel, playlist_manager );
- else splitter->Unsplit( playlist_manager );
-
- SetIntfMinSize();
- main_sizer->Layout();
- main_sizer->Fit( this );
-}
-
-void Interface::OnPlayStream( wxCommandEvent& WXUNUSED(event) )
-{
- PlayStream();
-}
-
-void Interface::PlayStream()
-{
- wxCommandEvent dummy;
- playlist_t *p_playlist = pl_Hold( p_intf );
- if( p_playlist == NULL ) return;
-
- if( !playlist_IsEmpty(p_playlist) )
- {
- vlc_value_t state;
-
- input_thread_t *p_input = (input_thread_t *)vlc_object_find( p_intf,
- VLC_OBJECT_INPUT,
- FIND_ANYWHERE );
- if( p_input == NULL )
- {
- /* No stream was playing, start one */
- playlist_Play( p_playlist );
- pl_Release( p_intf );
- input_manager->Update();
- return;
- }
-
- var_Get( p_input, "state", &state );
- if( state.i_int != PAUSE_S )
- {
- /* A stream is being played, pause it */
- state.i_int = PAUSE_S;
- }
- else
- {
- /* Stream is paused, resume it */
- state.i_int = PLAYING_S;
- }
- var_Set( p_input, "state", state );
-
- vlc_object_release( p_input );
- pl_Release( p_intf );
- input_manager->Update();
- }
- else
- {
- /* If the playlist is empty, open a file requester instead */
- pl_Release( p_intf );
- OnShowDialog( dummy );
- GetToolBar()->ToggleTool( PlayStream_Event, false );
- }
-}
-
-void Interface::OnStopStream( wxCommandEvent& WXUNUSED(event) )
-{
- StopStream();
-}
-void Interface::StopStream()
-{
- playlist_t * p_playlist = pl_Hold( p_intf );
- if( p_playlist == NULL )
- {
- return;
- }
-
- playlist_Stop( p_playlist );
- pl_Release( p_intf );
- input_manager->Update();
-}
-
-void Interface::OnPrevStream( wxCommandEvent& WXUNUSED(event) )
-{
- PrevStream();
-}
-
-void Interface::PrevStream()
-{
- playlist_t * p_playlist = pl_Hold( p_intf );
- if( p_playlist == NULL )
- {
- return;
- }
-
- playlist_Prev( p_playlist );
- pl_Release( p_intf );
-}
-
-void Interface::OnNextStream( wxCommandEvent& WXUNUSED(event) )
-{
- NextStream();
-}
-
-void Interface::NextStream()
-{
- playlist_t * p_playlist = pl_Hold( p_intf );
- if( p_playlist == NULL )
- {
- return;
- }
- playlist_Next( p_playlist );
- pl_Release( p_intf );
-}
-
-void Interface::OnSlowStream( wxCommandEvent& WXUNUSED(event) )
-{
- input_thread_t *p_input =
- (input_thread_t *)vlc_object_find( p_intf, VLC_OBJECT_INPUT,
- FIND_ANYWHERE );
- if( p_input )
- {
- vlc_value_t val; val.b_bool = true;
-
- var_Set( p_input, "rate-slower", val );
- vlc_object_release( p_input );
- }
-}
-
-void Interface::OnFastStream( wxCommandEvent& WXUNUSED(event) )
-{
- input_thread_t *p_input =
- (input_thread_t *)vlc_object_find( p_intf, VLC_OBJECT_INPUT,
- FIND_ANYWHERE );
- if( p_input )
- {
- vlc_value_t val; val.b_bool = true;
-
- var_Set( p_input, "rate-faster", val );
- vlc_object_release( p_input );
- }
-}
-
-void Interface::OnToggleMute ( wxCommandEvent& WXUNUSED(event) )
-{
- aout_VolumeMute(p_intf, NULL);
- SyncVolume();
-
-}
-
-void Interface::SyncVolume()
-{
- wxToolBarToolBase *p_tool = (wxToolBarToolBase *)
- GetToolBar()->GetToolClientData( ToggleMute_Event );
- if ( !p_tool) return;
-
- audio_volume_t i_volume;
- aout_VolumeGet(p_intf, &i_volume);
-
- /* Updating the Mute Button... IF the slider is completely moved to the left,
- * the mute icon is shown too. */
- p_tool->SetNormalBitmap( wxBitmap( i_volume ? speaker_xpm : speaker_mute_xpm ) );
- GetToolBar()->Realize();
-#if defined( __WXMSW__ )
- /* Needed to work around a bug in wxToolBar::Realize() */
- GetToolBar()->SetSize( GetSize().GetWidth(),
- GetToolBar()->GetSize().GetHeight() );
- GetToolBar()->Update();
-#endif
- /* the Toggle to true and false is nescessary; otherwise, the Icon
- * is not repainted */
- GetToolBar()->ToggleTool( ToggleMute_Event, true );
- GetToolBar()->ToggleTool( ToggleMute_Event, false );
- GetToolBar()->Update();
-}
-
-void Interface::OnSlideVolume( wxScrollEvent& WXUNUSED(event))
-{
- wxSlider *p_tool = (wxSlider *)
- GetToolBar()->FindControl( SlideVolume_Event );
- if ( !p_tool) return;
-
- aout_VolumeSet(p_intf , p_tool->GetValue());
- SyncVolume();
-
-}
-
-void Interface::TogglePlayButton( int i_playing_status )
-{
- wxToolBarToolBase *p_tool = (wxToolBarToolBase *)
- GetToolBar()->GetToolClientData( PlayStream_Event );
- if( !p_tool ) return;
-
- if( i_playing_status == PLAYING_S )
- {
- p_tool->SetNormalBitmap( wxBitmap( pause_xpm ) );
- p_tool->SetLabel( wxU(_("Pause")) );
- p_tool->SetShortHelp( wxU(_(HELP_PAUSE)) );
- }
- else
- {
- p_tool->SetNormalBitmap( wxBitmap( play_xpm ) );
- p_tool->SetLabel( wxU(_("Play")) );
- p_tool->SetShortHelp( wxU(_(HELP_PLAY)) );
- }
-
- GetToolBar()->Realize();
-
-#if defined( __WXMSW__ )
- /* Needed to work around a bug in wxToolBar::Realize() */
- GetToolBar()->SetSize( GetSize().GetWidth(),
- GetToolBar()->GetSize().GetHeight() );
- GetToolBar()->Update();
-#endif
-
- GetToolBar()->ToggleTool( PlayStream_Event, true );
- GetToolBar()->ToggleTool( PlayStream_Event, false );
-}
-
-void Interface::OnInteraction( wxCommandEvent& event )
-{
- interaction_dialog_t *p_dialog = (interaction_dialog_t *)
- event.GetClientData();
-
- intf_dialog_args_t *p_arg = new intf_dialog_args_t;
- p_arg->p_dialog = p_dialog;
- p_arg->p_intf = p_intf;
-
- p_intf->p_sys->pf_show_dialog( p_intf, INTF_DIALOG_INTERACTION,
- 0, p_arg );
-
-}
-
-static int InteractCallback( vlc_object_t *p_this,
- const char *psz_var, vlc_value_t old_val,
- vlc_value_t new_val, void *param )
-{
- Interface *p_interface = (Interface*)param;
- /*interaction_dialog_t *p_dialog = (interaction_dialog_t*)(new_val.p_address);*/
-
- wxCommandEvent event( wxEVT_INTERACTION, -1 );
- event.SetClientData( new_val.p_address );
- p_interface->AddPendingEvent( event );
- return VLC_SUCCESS;
-}
-
-#if wxUSE_DRAG_AND_DROP
-/*****************************************************************************
- * Definition of DragAndDrop class.
- *****************************************************************************/
-DragAndDrop::DragAndDrop( intf_thread_t *_p_intf, bool _b_enqueue )
-{
- p_intf = _p_intf;
- b_enqueue = _b_enqueue;
-}
-
-bool DragAndDrop::OnDropFiles( wxCoord, wxCoord,
- const wxArrayString& filenames )
-{
- /* Add dropped files to the playlist */
- playlist_t *p_playlist = pl_Hold( p_intf );
- if( p_playlist == NULL )
- {
- return FALSE;
- }
-
- /* If we drag & drop a subtitle file, add it on the fly */
- if( filenames.GetCount() == 1 )
- {
- char *psz_utf8 = wxDnDFromLocale( filenames[0] );
- input_thread_t *p_input = (input_thread_t *)vlc_object_find( p_intf,
- VLC_OBJECT_INPUT, FIND_ANYWHERE );
- if( p_input )
- {
- if( !input_AddSubtitle( p_input, psz_utf8, true ) )
- {
- vlc_object_release( p_input );
- wxDnDLocaleFree( psz_utf8 );
- pl_Release( p_intf );
- return TRUE;
- }
- vlc_object_release( p_input );
- }
- wxDnDLocaleFree( psz_utf8 );
- }
-
- for( size_t i = 0; i < filenames.GetCount(); i++ )
- {
- char *psz_utf8 = wxDnDFromLocale( filenames[i] );
-
- playlist_Add( p_playlist, psz_utf8, NULL,
- PLAYLIST_APPEND | ((i | b_enqueue) ? 0 : PLAYLIST_GO),
- PLAYLIST_END, true, false );
-
- wxDnDLocaleFree( psz_utf8 );
- }
- pl_Release( p_intf );
-
- return TRUE;
-}
-#endif
-
-/*****************************************************************************
- * Systray class.
- *****************************************************************************/
-
-/* wxCocoa pretends to support this, but at least 2.6.x doesn't */
-#ifndef __APPLE__
-#ifdef wxHAS_TASK_BAR_ICON
-
-BEGIN_EVENT_TABLE(Systray, wxTaskBarIcon)
- /* Mouse events */
-#ifdef WIN32
- EVT_TASKBAR_LEFT_DCLICK(Systray::OnLeftClick)
-#else
- EVT_TASKBAR_LEFT_DOWN(Systray::OnLeftClick)
-#endif
- /* Menu events */
- EVT_MENU(Iconize_Event, Systray::OnMenuIconize)
- EVT_MENU(Exit_Event, Systray::OnExit)
- EVT_MENU(PlayStream_Event, Systray::OnPlayStream)
- EVT_MENU(NextStream_Event, Systray::OnNextStream)
- EVT_MENU(PrevStream_Event, Systray::OnPrevStream)
- EVT_MENU(StopStream_Event, Systray::OnStopStream)
-END_EVENT_TABLE()
-
-Systray::Systray( Interface *_p_main_interface, intf_thread_t *_p_intf )
-{
- p_main_interface = _p_main_interface;
- p_intf = _p_intf;
-
- SetIcon( wxIcon( (const char**) vlc16x16_xpm ), wxT("VLC media player") );
- if( !IsOk() || !IsIconInstalled() )
- {
- msg_Warn(p_intf, "cannot set systray icon, weird things may happen");
- }
-}
-
-/* Event handlers */
-void Systray::OnMenuIconize( wxCommandEvent& event )
-{
- p_main_interface->Show( ! p_main_interface->IsShown() );
- if ( p_main_interface->IsShown() ) p_main_interface->Raise();
-}
-
-void Systray::OnLeftClick( wxTaskBarIconEvent& event )
-{
- wxCommandEvent cevent;
- OnMenuIconize(cevent);
-}
-
-void Systray::OnExit( wxCommandEvent& event )
-{
- p_main_interface->Close(TRUE);
-}
-
-void Systray::OnPrevStream( wxCommandEvent& event )
-{
- p_main_interface->PrevStream();
-}
-
-void Systray::OnNextStream( wxCommandEvent& event )
-{
- p_main_interface->NextStream();
-}
-
-void Systray::OnPlayStream( wxCommandEvent& event )
-{
- p_main_interface->PlayStream();
-}
-
-void Systray::OnStopStream( wxCommandEvent& event )
-{
- p_main_interface->StopStream();
-}
-
-/* Systray popup menu */
-wxMenu* Systray::CreatePopupMenu()
-{
- int minimal = config_GetInt( p_intf, "wx-minimal" );
-
- wxMenu* systray_menu = new wxMenu;
- systray_menu->Append( Exit_Event, wxU(_("Quit VLC")) );
- systray_menu->AppendSeparator();
- systray_menu->Append( PlayStream_Event, wxU(_("Play/Pause")) );
-
- if (!minimal)
- {
- systray_menu->Append( PrevStream_Event, wxU(_("Previous")) );
- systray_menu->Append( NextStream_Event, wxU(_("Next")) );
- systray_menu->Append( StopStream_Event, wxU(_("Stop")) );
- }
- systray_menu->AppendSeparator();
- systray_menu->Append( Iconize_Event, wxU(_("Show/Hide Interface")) );
- return systray_menu;
-}
-
-void Systray::UpdateTooltip( const wxChar* tooltip )
-{
- SetIcon( wxIcon( (const char**) vlc16x16_xpm ), tooltip );
-}
-#endif
-#endif
+++ /dev/null
-/*****************************************************************************
- * interface.hpp: Main interface headers
- *****************************************************************************
- * Copyright (C) 1999-2005 the VideoLAN team
- * $Id$
- *
- * Authors: Gildas Bazin <gbazin@videolan.org>
- *
- * 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., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
- *****************************************************************************/
-
-#ifndef _WXVLC_INTERFACE_H_
-#define _WXVLC_INTERFACE_H_
-
-#include "wxwidgets.hpp"
-#include "input_manager.hpp"
-
-#include <wx/dnd.h>
-#include <wx/accel.h>
-#include <wx/taskbar.h>
-
-class Splitter;
-
-namespace wxvlc
-{
- class Timer;
- class Interface;
-
-#if wxUSE_DRAG_AND_DROP
- /* Drag and Drop class */
- class DragAndDrop: public wxFileDropTarget
- {
- public:
- DragAndDrop( intf_thread_t *_p_intf, bool b_enqueue = false );
- virtual bool OnDropFiles( wxCoord x, wxCoord y,
- const wxArrayString& filenames );
-
- private:
- intf_thread_t *p_intf;
- bool b_enqueue;
- };
-#endif
-
- /* Systray integration */
-/* wxCocoa pretends to support this, but at least 2.6.x doesn't */
-#ifndef __APPLE__
-#ifdef wxHAS_TASK_BAR_ICON
- class Systray: public wxTaskBarIcon
- {
- public:
- Systray( Interface* p_main_interface, intf_thread_t *p_intf );
- virtual ~Systray() {};
- wxMenu* CreatePopupMenu();
- void UpdateTooltip( const wxChar* tooltip );
-
- private:
- void OnMenuIconize( wxCommandEvent& event );
- void OnLeftClick( wxTaskBarIconEvent& event );
- void OnPlayStream ( wxCommandEvent& event );
- void OnStopStream ( wxCommandEvent& event );
- void OnPrevStream ( wxCommandEvent& event );
- void OnNextStream ( wxCommandEvent& event );
- void OnExit( wxCommandEvent& event );
- Interface* p_main_interface;
- intf_thread_t *p_intf;
- DECLARE_EVENT_TABLE()
- };
-#endif
-#endif
-
- /* Main Interface */
- class Interface: public wxFrame
- {
- public:
- /* Constructor */
- Interface( intf_thread_t *p_intf, long style = wxDEFAULT_FRAME_STYLE );
- virtual ~Interface();
- void Init();
- void TogglePlayButton( int i_playing_status );
- void Update();
- void PlayStream();
- void StopStream();
- void PrevStream();
- void NextStream();
-
- wxBoxSizer *main_sizer;
- Splitter *splitter;
-
- wxPanel *main_panel;
- wxBoxSizer *panel_sizer;
-
- wxStatusBar *statusbar;
-
- InputManager *input_manager;
-
- wxControl *volctrl;
-
- /* wxCocoa pretends to support this, but at least 2.6.x doesn't */
- #ifndef __APPLE__
- #ifdef wxHAS_TASK_BAR_ICON
- Systray *p_systray;
- #endif
- #endif
-
- wxWindow *video_window;
-
- private:
- void SetupHotkeys();
- void CreateOurMenuBar();
- void CreateOurToolBar();
- void CreateOurExtendedPanel();
- void Open( int i_access_method );
-
- void SetIntfMinSize();
-
- /* Event handlers (these functions should _not_ be virtual) */
- void OnExit( wxCommandEvent& event );
- void OnAbout( wxCommandEvent& event );
- void OnWebLink( wxCommandEvent& event );
- void OnWebHelp( wxCommandEvent& event );
-
- void OnOpenFileSimple( wxCommandEvent& event );
- void OnOpenDir( wxCommandEvent& event );
- void OnOpenFile( wxCommandEvent& event );
- void OnOpenDisc( wxCommandEvent& event );
- void OnOpenNet( wxCommandEvent& event );
- void OnOpenSat( wxCommandEvent& event );
-
- void OnExtended( wxCommandEvent& event );
- void OnSmallPlaylist( wxCommandEvent& event );
-
- void OnBookmarks( wxCommandEvent& event );
- void OnShowDialog( wxCommandEvent& event );
- void OnPlayStream( wxCommandEvent& event );
- void OnStopStream( wxCommandEvent& event );
- void OnPrevStream( wxCommandEvent& event );
- void OnNextStream( wxCommandEvent& event );
- void OnSlowStream( wxCommandEvent& event );
- void OnFastStream( wxCommandEvent& event );
- void OnToggleMute( wxCommandEvent& event );
- void OnSlideVolume( wxScrollEvent& event );
- void SyncVolume( );
-
- void OnInteraction( wxCommandEvent& event );
-
- void OnMenuOpen( wxMenuEvent& event );
-
- #if defined( __WXMSW__ ) || defined( __WXMAC__ )
- void OnContextMenu2(wxContextMenuEvent& event);
- #endif
- void OnContextMenu(wxMouseEvent& event);
-
- void OnControlEvent( wxCommandEvent& event );
-
- DECLARE_EVENT_TABLE();
-
- Timer *timer;
- intf_thread_t *p_intf;
-
- unsigned int i_update_counter;
- int i_old_playing_status;
-
- /* For auto-generated menus */
- wxMenu *p_settings_menu;
- wxMenu *p_audio_menu;
- wxMenu *p_video_menu;
- wxMenu *p_navig_menu;
-
- /* Extended panel */
- bool b_extra;
- wxPanel *extra_frame;
-
- /* Playlist panel */
- wxPanel *playlist_manager;
-
- /* Utility dimensions */
- wxSize main_min_size;
- wxSize ext_min_size;
- };
-
-
- class WindowSettings
- {
- public:
- WindowSettings( intf_thread_t *_p_intf );
- virtual ~WindowSettings();
- enum
- {
- ID_SCREEN = -1,
- ID_MAIN,
- ID_PLAYLIST,
- ID_MESSAGES,
- ID_FILE_INFO,
- ID_BOOKMARKS,
- ID_VIDEO,
- ID_SMALL_PLAYLIST,
- ID_MAX,
- };
-
- void SetSettings( int id, bool _b_shown,
- wxPoint p = wxDefaultPosition, wxSize s = wxDefaultSize );
- bool GetSettings( int id, bool& _b_shown, wxPoint& p, wxSize& s );
-
- void SetScreen( int i_screen_w, int i_screen_h );
-
- private:
- intf_thread_t *p_intf;
-
- int i_screen_w;
- int i_screen_h;
- bool b_valid[ID_MAX];
- bool b_shown[ID_MAX];
- wxPoint position[ID_MAX];
- wxSize size[ID_MAX];
- };
-
-
- class MenuEvtHandler : public wxEvtHandler
- {
- public:
- MenuEvtHandler( intf_thread_t *p_intf, Interface *p_main_interface );
- virtual ~MenuEvtHandler();
-
- void OnMenuEvent( wxCommandEvent& event );
- void OnShowDialog( wxCommandEvent& event );
-
- private:
- DECLARE_EVENT_TABLE()
-
- intf_thread_t *p_intf;
- Interface *p_main_interface;
- };
-};
-
-void PopupMenu( intf_thread_t *, wxWindow *, const wxPoint& );
-void AudioPopupMenu( intf_thread_t *, wxWindow *, const wxPoint& );
-void VideoPopupMenu( intf_thread_t *, wxWindow *, const wxPoint& );
-void MiscPopupMenu( intf_thread_t *, wxWindow *, const wxPoint& );
-wxMenu *SettingsMenu( intf_thread_t *, wxWindow *, wxMenu * = NULL );
-wxMenu *AudioMenu( intf_thread_t *, wxWindow *, wxMenu * = NULL );
-wxMenu *VideoMenu( intf_thread_t *, wxWindow *, wxMenu * = NULL );
-wxMenu *NavigMenu( intf_thread_t *, wxWindow *, wxMenu * = NULL );
-
-#endif
+++ /dev/null
-/*****************************************************************************
- * menus.cpp : wxWidgets plugin for vlc
- *****************************************************************************
- * Copyright (C) 2000-2004 the VideoLAN team
- * $Id$
- *
- * Authors: Gildas Bazin <gbazin@videolan.org>
- *
- * 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., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
- *****************************************************************************/
-
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include <vlc_common.h>
-#include <vlc_interface.h>
-
-#include "wxwidgets.hpp"
-#include "interface.hpp"
-
-#include <wx/dynarray.h>
-WX_DEFINE_ARRAY(int, ArrayOfInts);
-WX_DEFINE_ARRAY_PTR(const char *, ArrayOfStrings);
-
-
-class wxMenuItemExt: public wxMenuItem
-{
-public:
- /* Constructor */
- wxMenuItemExt( wxMenu* parentMenu, int id, const wxString& text,
- const wxString& helpString, wxItemKind kind,
- char *_psz_var, int _i_object_id, vlc_value_t _val,
- int _i_val_type );
- virtual ~wxMenuItemExt();
-
- char *psz_var;
- int i_val_type;
- int i_object_id;
- vlc_value_t val;
-};
-
-class Menu: public wxMenu
-{
-public:
- /* Constructor */
- Menu( intf_thread_t *p_intf, int i_start_id );
- virtual ~Menu();
-
- void Populate( ArrayOfStrings &, ArrayOfInts &);
- void Clear();
-
-private:
- wxMenu *CreateDummyMenu();
- void CreateMenuItem( wxMenu *, const char *, vlc_object_t * );
- wxMenu *CreateChoicesMenu( const char *, vlc_object_t *, bool );
-
- DECLARE_EVENT_TABLE();
-
- intf_thread_t *p_intf;
-
- int i_start_id;
- int i_item_id;
-};
-
-/*****************************************************************************
- * Event Table.
- *****************************************************************************/
-enum
-{
- /* menu items */
- MenuDummy_Event = wxID_HIGHEST + 1000,
- OpenFileSimple_Event = wxID_HIGHEST + 1100,
- OpenFile_Event,
- OpenDirectory_Event,
- OpenDisc_Event,
- OpenNet_Event,
- OpenCapture_Event,
- MediaInfo_Event,
- Messages_Event,
- Preferences_Event,
- Play_Event,
- Pause_Event,
- Previous_Event,
- Next_Event,
- Stop_Event,
- FirstAutoGenerated_Event = wxID_HIGHEST + 1999,
- SettingsMenu_Events = wxID_HIGHEST + 5000,
- AudioMenu_Events = wxID_HIGHEST + 2000,
- VideoMenu_Events = wxID_HIGHEST + 3000,
- NavigMenu_Events = wxID_HIGHEST + 4000,
- PopupMenu_Events = wxID_HIGHEST + 6000,
- Hotkeys_Events = wxID_HIGHEST + 7000
-};
-
-BEGIN_EVENT_TABLE(Menu, wxMenu)
-END_EVENT_TABLE()
-
-BEGIN_EVENT_TABLE(MenuEvtHandler, wxEvtHandler)
- EVT_MENU(OpenFileSimple_Event, MenuEvtHandler::OnShowDialog)
- EVT_MENU(OpenFile_Event, MenuEvtHandler::OnShowDialog)
- EVT_MENU(OpenDirectory_Event, MenuEvtHandler::OnShowDialog)
- EVT_MENU(OpenDisc_Event, MenuEvtHandler::OnShowDialog)
- EVT_MENU(OpenNet_Event, MenuEvtHandler::OnShowDialog)
- EVT_MENU(OpenCapture_Event, MenuEvtHandler::OnShowDialog)
- EVT_MENU(MediaInfo_Event, MenuEvtHandler::OnShowDialog)
- EVT_MENU(Messages_Event, MenuEvtHandler::OnShowDialog)
- EVT_MENU(Preferences_Event, MenuEvtHandler::OnShowDialog)
- EVT_MENU(-1, MenuEvtHandler::OnMenuEvent)
-END_EVENT_TABLE()
-
-/*****************************************************************************
- * Static menu helpers
- *****************************************************************************/
-wxMenu *OpenStreamMenu( intf_thread_t *p_intf )
-{
- wxMenu *menu = new wxMenu;
- menu->Append( OpenFileSimple_Event, wxU(_("Quick &Open File...")) );
- menu->Append( OpenFile_Event, wxU(_("Open &File...")) );
- menu->Append( OpenDirectory_Event, wxU(_("Open D&irectory...")) );
- menu->Append( OpenDisc_Event, wxU(_("Open &Disc...")) );
- menu->Append( OpenNet_Event, wxU(_("Open &Network Stream...")) );
- menu->Append( OpenCapture_Event, wxU(_("Open &Capture Device...")) );
- return menu;
-}
-
-wxMenu *MiscMenu( intf_thread_t *p_intf )
-{
- wxMenu *menu = new wxMenu;
- menu->Append( MediaInfo_Event, wxU(_("Media &Info...")) );
- menu->Append( Messages_Event, wxU(_("&Messages...")) );
- menu->Append( Preferences_Event, wxU(_("&Preferences...")) );
- return menu;
-}
-
-/*****************************************************************************
- * Builders for the dynamic menus
- *****************************************************************************/
-#define PUSH_VAR( var ) rs_varnames.Add( var ); \
- ri_objects.Add( p_object->i_object_id )
-
-int InputAutoMenuBuilder( vlc_object_t *p_object, ArrayOfInts &ri_objects,
- ArrayOfStrings &rs_varnames )
-{
- PUSH_VAR( "bookmark");
- PUSH_VAR( "title" );
- PUSH_VAR ("chapter" );
- PUSH_VAR( "program" );
- PUSH_VAR( "navigation" );
- PUSH_VAR( "dvd_menus" );
- return VLC_SUCCESS;
-}
-
-int VideoAutoMenuBuilder( vlc_object_t *p_object, ArrayOfInts &ri_objects,
- ArrayOfStrings &rs_varnames )
-{
- PUSH_VAR( "fullscreen" );
- PUSH_VAR( "zoom" );
- PUSH_VAR( "deinterlace" );
- PUSH_VAR( "aspect-ratio" );
- PUSH_VAR( "crop" );
- PUSH_VAR( "video-on-top" );
- PUSH_VAR( "directx-wallpaper" );
- PUSH_VAR( "video-snapshot" );
-
- vlc_object_t *p_dec_obj = (vlc_object_t *)vlc_object_find( p_object,
- VLC_OBJECT_DECODER,
- FIND_PARENT );
- if( p_dec_obj != NULL )
- {
- vlc_object_t *p_object = p_dec_obj;
- PUSH_VAR( "ffmpeg-pp-q" );
- vlc_object_release( p_dec_obj );
- }
- return VLC_SUCCESS;
-}
-
-int AudioAutoMenuBuilder( vlc_object_t *p_object, ArrayOfInts &ri_objects,
- ArrayOfStrings &rs_varnames )
-{
- PUSH_VAR( "audio-device" );
- PUSH_VAR( "audio-channels" );
- PUSH_VAR( "visual" );
- PUSH_VAR( "equalizer" );
- return VLC_SUCCESS;
-}
-
-int IntfAutoMenuBuilder( intf_thread_t *p_intf, ArrayOfInts &ri_objects,
- ArrayOfStrings &rs_varnames, bool is_popup)
-{
- /* vlc_object_find is needed because of the dialogs provider case */
- vlc_object_t *p_object;
- p_object = (vlc_object_t *)vlc_object_find( p_intf, VLC_OBJECT_INTF,
- FIND_PARENT );
- if( p_object != NULL )
- {
- PUSH_VAR( "intf-add" );
- PUSH_VAR( "intf-skins" );
- vlc_object_release( p_object );
- }
- return VLC_SUCCESS;
-}
-
-#undef PUSH_VAR
-/*****************************************************************************
- * Popup menus
- *****************************************************************************/
-#define PUSH_VAR( var ) as_varnames.Add( var ); \
- ai_objects.Add( p_object->i_object_id )
-
-#define PUSH_SEPARATOR if( ai_objects.GetCount() != i_last_separator ) { \
- ai_objects.Add( 0 ); \
- as_varnames.Add( "" ); \
- i_last_separator = ai_objects.GetCount(); }
-
-#define POPUP_BOILERPLATE \
- unsigned int i_last_separator = 0; \
- ArrayOfInts ai_objects; \
- ArrayOfStrings as_varnames; \
- playlist_t *p_playlist = pl_Hold( p_intf ); \
- if( !p_playlist ) \
- return; \
- input_thread_t *p_input = p_playlist->p_input
-
-#define CREATE_POPUP \
- Menu popupmenu( p_intf, PopupMenu_Events ); \
- popupmenu.Populate( as_varnames, ai_objects ); \
- p_intf->p_sys->p_popup_menu = &popupmenu; \
- p_parent->PopupMenu( &popupmenu, pos.x, pos.y ); \
- p_intf->p_sys->p_popup_menu = NULL; \
- i_last_separator = 0 /* stop compiler warning */
-
-#define POPUP_STATIC_ENTRIES \
- if( p_input != NULL ) \
- { \
- vlc_value_t val; \
- popupmenu.InsertSeparator( 0 ); \
- if (!minimal) \
- { \
- popupmenu.Insert( 0, Stop_Event, wxU(_("Stop")) ); \
- popupmenu.Insert( 0, Previous_Event, wxU(_("Previous")) ); \
- popupmenu.Insert( 0, Next_Event, wxU(_("Next")) ); \
- } \
- \
- var_Get( p_input, "state", &val ); \
- if( val.i_int == PAUSE_S ) \
- popupmenu.Insert( 0, Play_Event, wxU(_("Play")) ); \
- else \
- popupmenu.Insert( 0, Pause_Event, wxU(_("Pause")) ); \
- \
- vlc_object_release( p_input ); \
- } \
- else \
- { \
- if( p_playlist && !playlist_IsEmpty( p_playlist ) ) \
- { \
- popupmenu.InsertSeparator( 0 ); \
- popupmenu.Insert( 0, Play_Event, wxU(_("Play")) ); \
- } \
- if( p_playlist ) pl_Release( p_intf ); \
- } \
- \
- popupmenu.Append( MenuDummy_Event, wxU(_("Miscellaneous")), \
- MiscMenu( p_intf ), wxT("") )
-
-
-void VideoPopupMenu( intf_thread_t *p_intf, wxWindow *p_parent,
- const wxPoint& pos )
-{
- POPUP_BOILERPLATE;
- if( p_input )
- {
- vlc_object_hold( p_input );
- as_varnames.Add( "video-es" );
- ai_objects.Add( p_input->i_object_id );
- as_varnames.Add( "spu-es" );
- ai_objects.Add( p_input->i_object_id );
- vlc_object_t *p_vout = (vlc_object_t *)vlc_object_find( p_input,
- VLC_OBJECT_VOUT, FIND_CHILD );
- if( p_vout )
- {
- VideoAutoMenuBuilder( p_vout, ai_objects, as_varnames );
- vlc_object_release( p_vout );
- }
- vlc_object_release( p_input );
- }
- pl_Release( p_intf );
- CREATE_POPUP;
-}
-
-void AudioPopupMenu( intf_thread_t *p_intf, wxWindow *p_parent,
- const wxPoint& pos )
-{
- POPUP_BOILERPLATE;
- if( p_input )
- {
- vlc_object_hold( p_input );
- as_varnames.Add( "audio-es" );
- ai_objects.Add( p_input->i_object_id );
- vlc_object_t *p_aout = (vlc_object_t *)vlc_object_find( p_input,
- VLC_OBJECT_AOUT, FIND_ANYWHERE );
- if( p_aout )
- {
- AudioAutoMenuBuilder( p_aout, ai_objects, as_varnames );
- vlc_object_release( p_aout );
- }
- vlc_object_release( p_input );
- }
- pl_Release( p_intf );
- CREATE_POPUP;
-}
-
-/* Navigation stuff, and general */
-void MiscPopupMenu( intf_thread_t *p_intf, wxWindow *p_parent,
- const wxPoint& pos )
-{
- int minimal = 0;
- POPUP_BOILERPLATE;
- if( p_input )
- {
- vlc_object_hold( p_input );
- as_varnames.Add( "audio-es" );
- InputAutoMenuBuilder( VLC_OBJECT(p_input), ai_objects, as_varnames );
- PUSH_SEPARATOR;
- }
- IntfAutoMenuBuilder( p_intf, ai_objects, as_varnames, true );
-
- Menu popupmenu( p_intf, PopupMenu_Events );
- popupmenu.Populate( as_varnames, ai_objects );
-
- POPUP_STATIC_ENTRIES;
- popupmenu.Append( MenuDummy_Event, wxU(_("Open")),
- OpenStreamMenu( p_intf ), wxT("") );
-
- p_intf->p_sys->p_popup_menu = &popupmenu;
- p_parent->PopupMenu( &popupmenu, pos.x, pos.y );
- p_intf->p_sys->p_popup_menu = NULL;
- pl_Release( p_intf );
-}
-
-void PopupMenu( intf_thread_t *p_intf, wxWindow *p_parent,
- const wxPoint& pos )
-{
- int minimal = config_GetInt( p_intf, "wx-minimal" );
- POPUP_BOILERPLATE;
- if( p_input )
- {
- vlc_object_hold( p_input );
- InputAutoMenuBuilder( VLC_OBJECT(p_input), ai_objects, as_varnames );
-
- /* Video menu */
- PUSH_SEPARATOR;
- as_varnames.Add( "video-es" );
- ai_objects.Add( p_input->i_object_id );
- as_varnames.Add( "spu-es" );
- ai_objects.Add( p_input->i_object_id );
- vlc_object_t *p_vout = (vlc_object_t *)vlc_object_find( p_input,
- VLC_OBJECT_VOUT, FIND_CHILD );
- if( p_vout )
- {
- VideoAutoMenuBuilder( p_vout, ai_objects, as_varnames );
- vlc_object_release( p_vout );
- }
- /* Audio menu */
- PUSH_SEPARATOR
- as_varnames.Add( "audio-es" );
- ai_objects.Add( p_input->i_object_id );
- vlc_object_t *p_aout = (vlc_object_t *)vlc_object_find( p_input,
- VLC_OBJECT_AOUT, FIND_ANYWHERE );
- if( p_aout )
- {
- AudioAutoMenuBuilder( p_aout, ai_objects, as_varnames );
- vlc_object_release( p_aout );
- }
- }
-
- /* Interface menu */
- PUSH_SEPARATOR
- IntfAutoMenuBuilder( p_intf, ai_objects, as_varnames, true );
-
- /* Build menu */
- Menu popupmenu( p_intf, PopupMenu_Events );
- popupmenu.Populate( as_varnames, ai_objects );
- POPUP_STATIC_ENTRIES;
-
- if (!minimal)
- {
- popupmenu.Append( MenuDummy_Event, wxU(_("Open")),
- OpenStreamMenu( p_intf ), wxT("") );
- }
- p_intf->p_sys->p_popup_menu = &popupmenu;
- p_parent->PopupMenu( &popupmenu, pos.x, pos.y );
- p_intf->p_sys->p_popup_menu = NULL;
- pl_Release( p_intf );
-}
-
-/*****************************************************************************
- * Auto menus
- *****************************************************************************/
-wxMenu *AudioMenu( intf_thread_t *_p_intf, wxWindow *p_parent, wxMenu *p_menu )
-{
- vlc_object_t *p_object;
- ArrayOfInts ai_objects;
- ArrayOfStrings as_varnames;
-
- p_object = (vlc_object_t *)vlc_object_find( _p_intf, VLC_OBJECT_INPUT,
- FIND_ANYWHERE );
- if( p_object != NULL )
- {
- PUSH_VAR( "audio-es" );
- vlc_object_release( p_object );
- }
-
- p_object = (vlc_object_t *)vlc_object_find( _p_intf, VLC_OBJECT_AOUT,
- FIND_ANYWHERE );
- if( p_object )
- {
- AudioAutoMenuBuilder( p_object, ai_objects, as_varnames );
- vlc_object_release( p_object );
- }
-
- /* Build menu */
- Menu *p_vlc_menu = (Menu *)p_menu;
- if( !p_vlc_menu )
- p_vlc_menu = new Menu( _p_intf, AudioMenu_Events );
- else
- p_vlc_menu->Clear();
-
- p_vlc_menu->Populate( as_varnames, ai_objects );
-
- return p_vlc_menu;
-}
-
-wxMenu *VideoMenu( intf_thread_t *_p_intf, wxWindow *p_parent, wxMenu *p_menu )
-{
- vlc_object_t *p_object;
- ArrayOfInts ai_objects;
- ArrayOfStrings as_varnames;
-
- p_object = (vlc_object_t *)vlc_object_find( _p_intf, VLC_OBJECT_INPUT,
- FIND_ANYWHERE );
- if( p_object != NULL )
- {
- PUSH_VAR( "video-es" );
- PUSH_VAR( "spu-es" );
- vlc_object_release( p_object );
- }
-
- p_object = (vlc_object_t *)vlc_object_find( _p_intf, VLC_OBJECT_VOUT,
- FIND_ANYWHERE );
- if( p_object != NULL )
- {
- VideoAutoMenuBuilder( p_object, ai_objects, as_varnames );
- vlc_object_release( p_object );
- }
-
- /* Build menu */
- Menu *p_vlc_menu = (Menu *)p_menu;
- if( !p_vlc_menu )
- p_vlc_menu = new Menu( _p_intf, VideoMenu_Events );
- else
- p_vlc_menu->Clear();
-
- p_vlc_menu->Populate( as_varnames, ai_objects );
- return p_vlc_menu;
-}
-
-wxMenu *NavigMenu( intf_thread_t *_p_intf, wxWindow *p_parent, wxMenu *p_menu )
-{
- vlc_object_t *p_object;
- ArrayOfInts ai_objects;
- ArrayOfStrings as_varnames;
-
- p_object = (vlc_object_t *)vlc_object_find( _p_intf, VLC_OBJECT_INPUT,
- FIND_ANYWHERE );
- if( p_object != NULL )
- {
- InputAutoMenuBuilder( p_object, ai_objects, as_varnames );
- PUSH_VAR( "prev-title"); PUSH_VAR ( "next-title" );
- PUSH_VAR( "prev-chapter"); PUSH_VAR( "next-chapter" );
- vlc_object_release( p_object );
- }
-
- /* Build menu */
- Menu *p_vlc_menu = (Menu *)p_menu;
- if( !p_vlc_menu )
- p_vlc_menu = new Menu( _p_intf, NavigMenu_Events );
- else
- p_vlc_menu->Clear();
-
- p_vlc_menu->Populate( as_varnames, ai_objects );
-
- return p_vlc_menu;
-}
-
-wxMenu *SettingsMenu( intf_thread_t *_p_intf, wxWindow *p_parent,
- wxMenu *p_menu )
-{
- vlc_object_t *p_object;
- ArrayOfInts ai_objects;
- ArrayOfStrings as_varnames;
-
- p_object = (vlc_object_t *)vlc_object_find( _p_intf, VLC_OBJECT_INTF,
- FIND_PARENT );
- if( p_object != NULL )
- {
- PUSH_VAR( "intf-add" );
- vlc_object_release( p_object );
- }
-
- /* Build menu */
- Menu *p_vlc_menu = (Menu *)p_menu;
- if( !p_vlc_menu )
- p_vlc_menu = new Menu( _p_intf, SettingsMenu_Events );
- else
- p_vlc_menu->Clear();
-
- p_vlc_menu->Populate( as_varnames, ai_objects );
-
- return p_vlc_menu;
-}
-
-/*****************************************************************************
- * Constructor.
- *****************************************************************************/
-Menu::Menu( intf_thread_t *_p_intf, int _i_start_id ) : wxMenu( )
-{
- /* Initializations */
- p_intf = _p_intf;
- i_start_id = _i_start_id;
-}
-
-Menu::~Menu()
-{
-}
-
-/*****************************************************************************
- * Public methods.
- *****************************************************************************/
-void Menu::Populate( ArrayOfStrings & ras_varnames,
- ArrayOfInts & rai_objects )
-{
- vlc_object_t *p_object;
- bool b_section_empty = false;
- int i;
-
- i_item_id = i_start_id;
-
- for( i = 0; i < (int)rai_objects.GetCount() ; i++ )
- {
- if( !ras_varnames[i] || !*ras_varnames[i] )
- {
- if( b_section_empty )
- {
- Append( MenuDummy_Event + i, wxU(_("Empty")) );
- Enable( MenuDummy_Event + i, FALSE );
- }
- AppendSeparator();
- b_section_empty = true;
- continue;
- }
-
- if( rai_objects[i] == 0 )
- {
- Append( MenuDummy_Event, wxU(ras_varnames[i]) );
- b_section_empty = false;
- continue;
- }
-
- p_object = (vlc_object_t *)vlc_object_get( p_intf->p_libvlc, rai_objects[i] );
- if( p_object == NULL ) continue;
-
- b_section_empty = false;
- CreateMenuItem( this, ras_varnames[i], p_object );
- vlc_object_release( p_object );
- }
-
- /* Special case for empty menus */
- if( GetMenuItemCount() == 0 || b_section_empty )
- {
- Append( MenuDummy_Event + i, wxU(_("Empty")) );
- Enable( MenuDummy_Event + i, FALSE );
- }
-}
-
-/* Work-around helper for buggy wxGTK */
-static void RecursiveDestroy( wxMenu *menu )
-{
- wxMenuItemList::Node *node = menu->GetMenuItems().GetFirst();
- for( ; node; )
- {
- wxMenuItem *item = node->GetData();
- node = node->GetNext();
-
- /* Delete the submenus */
- wxMenu *submenu = item->GetSubMenu();
- if( submenu )
- {
- RecursiveDestroy( submenu );
- }
- menu->Delete( item );
- }
-}
-
-void Menu::Clear( )
-{
- RecursiveDestroy( this );
-}
-
-/*****************************************************************************
- * Private methods.
- *****************************************************************************/
-static bool IsMenuEmpty( const char *psz_var, vlc_object_t *p_object,
- bool b_root = TRUE )
-{
- vlc_value_t val, val_list;
- int i_type, i_result, i;
-
- /* Check the type of the object variable */
- i_type = var_Type( p_object, psz_var );
-
- /* Check if we want to display the variable */
- if( !(i_type & VLC_VAR_HASCHOICE) ) return FALSE;
-
- var_Change( p_object, psz_var, VLC_VAR_CHOICESCOUNT, &val, NULL );
- if( val.i_int == 0 ) return TRUE;
-
- if( (i_type & VLC_VAR_TYPE) != VLC_VAR_VARIABLE )
- {
- if( val.i_int == 1 && b_root ) return TRUE;
- else return FALSE;
- }
-
- /* Check children variables in case of VLC_VAR_VARIABLE */
- if( var_Change( p_object, psz_var, VLC_VAR_GETLIST, &val_list, NULL ) < 0 )
- {
- return TRUE;
- }
-
- for( i = 0, i_result = TRUE; i < val_list.p_list->i_count; i++ )
- {
- if( !IsMenuEmpty( val_list.p_list->p_values[i].psz_string,
- p_object, FALSE ) )
- {
- i_result = FALSE;
- break;
- }
- }
-
- /* clean up everything */
- var_Change( p_object, psz_var, VLC_VAR_FREELIST, &val_list, NULL );
-
- return i_result;
-}
-
-void Menu::CreateMenuItem( wxMenu *menu, const char *psz_var,
- vlc_object_t *p_object )
-{
- wxMenuItemExt *menuitem;
- vlc_value_t val, text;
- int i_type;
-
- /* Check the type of the object variable */
- i_type = var_Type( p_object, psz_var );
-
- switch( i_type & VLC_VAR_TYPE )
- {
- case VLC_VAR_VOID:
- case VLC_VAR_BOOL:
- case VLC_VAR_VARIABLE:
- case VLC_VAR_STRING:
- case VLC_VAR_INTEGER:
- case VLC_VAR_FLOAT:
- break;
- default:
- /* Variable doesn't exist or isn't handled */
- return;
- }
-
- /* Make sure we want to display the variable */
- if( IsMenuEmpty( psz_var, p_object ) ) return;
-
- /* Get the descriptive name of the variable */
- var_Change( p_object, psz_var, VLC_VAR_GETTEXT, &text, NULL );
-
- if( i_type & VLC_VAR_HASCHOICE )
- {
- menu->Append( MenuDummy_Event,
- wxU(text.psz_string ? text.psz_string : psz_var),
- CreateChoicesMenu( psz_var, p_object, TRUE ),
- wxT("")/* Nothing for now (maybe use a GETLONGTEXT) */ );
-
- free( text.psz_string );
- return;
- }
-
-
- switch( i_type & VLC_VAR_TYPE )
- {
- case VLC_VAR_VOID:
- var_Get( p_object, psz_var, &val );
- menuitem = new wxMenuItemExt( menu, ++i_item_id,
- wxU(text.psz_string ?
- text.psz_string : psz_var),
- wxT(""), wxITEM_NORMAL, strdup(psz_var),
- p_object->i_object_id, val, i_type );
- menu->Append( menuitem );
- break;
-
- case VLC_VAR_BOOL:
- var_Get( p_object, psz_var, &val );
- val.b_bool = !val.b_bool;
- menuitem = new wxMenuItemExt( menu, ++i_item_id,
- wxU(text.psz_string ?
- text.psz_string : psz_var),
- wxT(""), wxITEM_CHECK, strdup(psz_var),
- p_object->i_object_id, val, i_type );
- menu->Append( menuitem );
- Check( i_item_id, val.b_bool ? FALSE : TRUE );
- break;
- }
-
- free( text.psz_string );
-}
-
-wxMenu *Menu::CreateChoicesMenu( const char *psz_var, vlc_object_t *p_object,
- bool b_root )
-{
- vlc_value_t val, val_list, text_list;
- int i_type, i;
-
- /* Check the type of the object variable */
- i_type = var_Type( p_object, psz_var );
-
- /* Make sure we want to display the variable */
- if( IsMenuEmpty( psz_var, p_object, b_root ) ) return NULL;
-
- switch( i_type & VLC_VAR_TYPE )
- {
- case VLC_VAR_VOID:
- case VLC_VAR_BOOL:
- case VLC_VAR_VARIABLE:
- case VLC_VAR_STRING:
- case VLC_VAR_INTEGER:
- case VLC_VAR_FLOAT:
- break;
- default:
- /* Variable doesn't exist or isn't handled */
- return NULL;
- }
-
- if( var_Change( p_object, psz_var, VLC_VAR_GETLIST,
- &val_list, &text_list ) < 0 )
- {
- return NULL;
- }
-
- wxMenu *menu = new wxMenu;
- for( i = 0; i < val_list.p_list->i_count; i++ )
- {
- vlc_value_t another_val;
- wxMenuItemExt *menuitem;
-
- switch( i_type & VLC_VAR_TYPE )
- {
- case VLC_VAR_VARIABLE:
- menu->Append( MenuDummy_Event,
- wxU(text_list.p_list->p_values[i].psz_string ?
- text_list.p_list->p_values[i].psz_string :
- val_list.p_list->p_values[i].psz_string),
- CreateChoicesMenu(
- val_list.p_list->p_values[i].psz_string,
- p_object, FALSE ), wxT("") );
- break;
-
- case VLC_VAR_STRING:
- var_Get( p_object, psz_var, &val );
-
- another_val.psz_string =
- strdup(val_list.p_list->p_values[i].psz_string);
- menuitem =
- new wxMenuItemExt( menu, ++i_item_id,
- wxU(text_list.p_list->p_values[i].psz_string ?
- text_list.p_list->p_values[i].psz_string :
- another_val.psz_string), wxT(""),
- i_type & VLC_VAR_ISCOMMAND ?
- wxITEM_NORMAL : wxITEM_RADIO,
- strdup(psz_var),
- p_object->i_object_id, another_val, i_type );
-
- menu->Append( menuitem );
-
- if( !(i_type & VLC_VAR_ISCOMMAND) && val.psz_string &&
- !strcmp( val.psz_string,
- val_list.p_list->p_values[i].psz_string ) )
- menu->Check( i_item_id, TRUE );
-
- free( val.psz_string );
- break;
-
- case VLC_VAR_INTEGER:
- var_Get( p_object, psz_var, &val );
-
- menuitem =
- new wxMenuItemExt( menu, ++i_item_id,
- text_list.p_list->p_values[i].psz_string ?
- (wxString)wxU(
- text_list.p_list->p_values[i].psz_string) :
- wxString::Format(wxT("%d"),
- val_list.p_list->p_values[i].i_int), wxT(""),
- i_type & VLC_VAR_ISCOMMAND ?
- wxITEM_NORMAL : wxITEM_RADIO,
- strdup(psz_var),
- p_object->i_object_id,
- val_list.p_list->p_values[i], i_type );
-
- menu->Append( menuitem );
-
- if( !(i_type & VLC_VAR_ISCOMMAND) &&
- val_list.p_list->p_values[i].i_int == val.i_int )
- menu->Check( i_item_id, TRUE );
- break;
-
- case VLC_VAR_FLOAT:
- var_Get( p_object, psz_var, &val );
-
- menuitem =
- new wxMenuItemExt( menu, ++i_item_id,
- text_list.p_list->p_values[i].psz_string ?
- (wxString)wxU(
- text_list.p_list->p_values[i].psz_string) :
- wxString::Format(wxT("%.2f"),
- val_list.p_list->p_values[i].f_float),wxT(""),
- i_type & VLC_VAR_ISCOMMAND ?
- wxITEM_NORMAL : wxITEM_RADIO,
- strdup(psz_var),
- p_object->i_object_id,
- val_list.p_list->p_values[i], i_type );
-
- menu->Append( menuitem );
-
- if( !(i_type & VLC_VAR_ISCOMMAND) &&
- val_list.p_list->p_values[i].f_float == val.f_float )
- menu->Check( i_item_id, TRUE );
- break;
-
- default:
- break;
- }
- }
-
- /* clean up everything */
- var_Change( p_object, psz_var, VLC_VAR_FREELIST, &val_list, &text_list );
-
- return menu;
-}
-
-/*****************************************************************************
- * A small helper class which intercepts all popup menu events
- *****************************************************************************/
-MenuEvtHandler::MenuEvtHandler( intf_thread_t *_p_intf,
- Interface *_p_main_interface )
-{
- /* Initializations */
- p_intf = _p_intf;
- p_main_interface = _p_main_interface;
-}
-
-MenuEvtHandler::~MenuEvtHandler()
-{
-}
-
-void MenuEvtHandler::OnShowDialog( wxCommandEvent& event )
-{
- if( p_intf->p_sys->pf_show_dialog )
- {
- int i_id;
-
- switch( event.GetId() )
- {
- case OpenFileSimple_Event:
- i_id = INTF_DIALOG_FILE_SIMPLE;
- break;
- case OpenFile_Event:
- i_id = INTF_DIALOG_FILE;
- break;
- case OpenDirectory_Event:
- i_id = INTF_DIALOG_DIRECTORY;
- break;
- case OpenDisc_Event:
- i_id = INTF_DIALOG_DISC;
- break;
- case OpenNet_Event:
- i_id = INTF_DIALOG_NET;
- break;
- case OpenCapture_Event:
- i_id = INTF_DIALOG_CAPTURE;
- break;
- case MediaInfo_Event:
- i_id = INTF_DIALOG_FILEINFO;
- break;
- case Messages_Event:
- i_id = INTF_DIALOG_MESSAGES;
- break;
- case Preferences_Event:
- i_id = INTF_DIALOG_PREFS;
- break;
- default:
- i_id = INTF_DIALOG_FILE;
- break;
-
- }
-
- p_intf->p_sys->pf_show_dialog( p_intf, i_id, 1, 0 );
- }
-}
-
-void MenuEvtHandler::OnMenuEvent( wxCommandEvent& event )
-{
- wxMenuItem *p_menuitem = NULL;
- int i_hotkey_event = p_intf->p_sys->i_first_hotkey_event;
- int i_hotkeys = p_intf->p_sys->i_hotkeys;
-
- if( event.GetId() >= Play_Event && event.GetId() <= Stop_Event )
- {
- input_thread_t *p_input;
- playlist_t * p_playlist = pl_Hold( p_intf );
- if( !p_playlist ) return;
-
- switch( event.GetId() )
- {
- case Play_Event:
- case Pause_Event:
- p_input =
- (input_thread_t *)vlc_object_find( p_intf, VLC_OBJECT_INPUT,
- FIND_ANYWHERE );
- if( !p_input ) playlist_Play( p_playlist );
- else
- {
- vlc_value_t val;
- var_Get( p_input, "state", &val );
- if( val.i_int != PAUSE_S ) val.i_int = PAUSE_S;
- else val.i_int = PLAYING_S;
- var_Set( p_input, "state", val );
- vlc_object_release( p_input );
- }
- break;
- case Stop_Event:
- playlist_Stop( p_playlist );
- break;
- case Previous_Event:
- playlist_Prev( p_playlist );
- break;
- case Next_Event:
- playlist_Next( p_playlist );
- break;
- }
- pl_Release( p_intf );
- return;
- }
-
- /* Check if this is an auto generated menu item */
- if( event.GetId() < FirstAutoGenerated_Event )
- {
- event.Skip();
- return;
- }
-
- /* Check if this is an hotkey event */
- if( event.GetId() >= i_hotkey_event &&
- event.GetId() < i_hotkey_event + i_hotkeys )
- {
- vlc_value_t val;
-
- val.i_int =
- p_intf->p_libvlc->p_hotkeys[event.GetId() - i_hotkey_event].i_key;
-
- /* Get the key combination and send it to the hotkey handler */
- var_Set( p_intf->p_libvlc, "key-pressed", val );
- return;
- }
-
- if( !p_main_interface ||
- (p_menuitem = p_main_interface->GetMenuBar()->FindItem(event.GetId()))
- == NULL )
- {
- if( p_intf->p_sys->p_popup_menu )
- {
- p_menuitem =
- p_intf->p_sys->p_popup_menu->FindItem( event.GetId() );
- }
- }
-
- if( p_menuitem )
- {
- wxMenuItemExt *p_menuitemext = (wxMenuItemExt *)p_menuitem;
- vlc_object_t *p_object;
-
- p_object = (vlc_object_t *)vlc_object_get( p_intf->p_libvlc, p_menuitemext->i_object_id );
- if( p_object == NULL ) return;
-
- wxMutexGuiLeave(); // We don't want deadlocks
- var_Set( p_object, p_menuitemext->psz_var, p_menuitemext->val );
- //wxMutexGuiEnter();
-
- vlc_object_release( p_object );
- }
- else
- event.Skip();
-}
-
-/*****************************************************************************
- * A small helper class which encapsulate wxMenuitem with some other useful
- * things.
- *****************************************************************************/
-wxMenuItemExt::wxMenuItemExt( wxMenu* parentMenu, int id, const wxString& text,
- const wxString& helpString, wxItemKind kind,
- char *_psz_var, int _i_object_id, vlc_value_t _val, int _i_val_type ):
- wxMenuItem( parentMenu, id, text, helpString, kind )
-{
- /* Initializations */
- psz_var = _psz_var;
- i_val_type = _i_val_type;
- i_object_id = _i_object_id;
- val = _val;
-};
-
-wxMenuItemExt::~wxMenuItemExt()
-{
- free( psz_var );
- if( ( i_val_type & VLC_VAR_TYPE ) == VLC_VAR_STRING )
- free( val.psz_string );
-};
+++ /dev/null
-/*****************************************************************************
- * playlist_manager.cpp : wxWindows plugin for vlc
- *****************************************************************************
- * Copyright (C) 2000-2005 the VideoLAN team
- * $Id$
- *
- * Authors: Olivier Teulière <ipkiss@via.ecp.fr>
- * Clément Stenac <zorglub@videolan.org>
- * Gildas Bazin <gbazin@videolan.org>
- *
- * 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., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
- *****************************************************************************/
-
-/*****************************************************************************
- * Preamble
- *****************************************************************************/
-#include "playlist_manager.hpp"
-#include "interface.hpp"
-
-#include "bitmaps/type_unknown.xpm"
-#include "bitmaps/type_afile.xpm"
-#include "bitmaps/type_vfile.xpm"
-#include "bitmaps/type_net.xpm"
-#include "bitmaps/type_card.xpm"
-#include "bitmaps/type_disc.xpm"
-#include "bitmaps/type_cdda.xpm"
-#include "bitmaps/type_directory.xpm"
-#include "bitmaps/type_playlist.xpm"
-#include "bitmaps/type_node.xpm"
-
-#include <wx/dynarray.h>
-#include <wx/imaglist.h>
-#include "vlc_meta.h"
-
-namespace wxvlc {
-/* Callback prototype */
-static int PlaylistChanged( vlc_object_t *, const char *,
- vlc_value_t, vlc_value_t, void * );
-static int PlaylistNext( vlc_object_t *, const char *,
- vlc_value_t, vlc_value_t, void * );
-static int ItemChanged( vlc_object_t *, const char *,
- vlc_value_t, vlc_value_t, void * );
-static int ItemAppended( vlc_object_t *p_this, const char *psz_variable,
- vlc_value_t oval, vlc_value_t nval, void *param );
-static int ItemDeleted( vlc_object_t *p_this, const char *psz_variable,
- vlc_value_t oval, vlc_value_t nval, void *param );
-
-/*****************************************************************************
- * Event Table.
- *****************************************************************************/
-
-/* IDs for the controls and the menu commands */
-enum
-{
- TreeCtrl_Event,
-
- UpdateItem_Event,
- AppendItem_Event,
- RemoveItem_Event,
-};
-
-DEFINE_LOCAL_EVENT_TYPE( wxEVT_PLAYLIST );
-
-BEGIN_EVENT_TABLE(PlaylistManager, wxPanel)
- /* Tree control events */
- EVT_TREE_ITEM_ACTIVATED( TreeCtrl_Event, PlaylistManager::OnActivateItem )
-
- /* Custom events */
- EVT_COMMAND(-1, wxEVT_PLAYLIST, PlaylistManager::OnPlaylistEvent)
-END_EVENT_TABLE()
-
-/*****************************************************************************
- * PlaylistItem class
- ****************************************************************************/
-class PlaylistItem : public wxTreeItemData
-{
-public:
- PlaylistItem( playlist_item_t *p_item ) : wxTreeItemData()
- {
- i_id = p_item->i_id;
- i_input_id = p_item->p_input->i_id;
- }
-protected:
- int i_input_id;
- int i_id;
-friend class PlaylistManager;
-};
-
-/*****************************************************************************
- * Constructor.
- *****************************************************************************/
-PlaylistManager::PlaylistManager( intf_thread_t *_p_intf, wxWindow *p_parent ):
- wxPanel( p_parent, -1, wxDefaultPosition, wxSize(0,0) )
-{
- /* Initializations */
- p_intf = _p_intf;
- b_need_update = false;
- i_items_to_append = 0;
- i_cached_item_id = -1;
- i_update_counter = 0;
-
- p_playlist = pl_Hold( p_intf );
- if( p_playlist == NULL ) return;
-
- var_Create( p_intf, "random", VLC_VAR_BOOL | VLC_VAR_DOINHERIT );
- var_Create( p_intf, "loop", VLC_VAR_BOOL | VLC_VAR_DOINHERIT );
- var_Create( p_intf, "repeat", VLC_VAR_BOOL | VLC_VAR_DOINHERIT );;
-
- /* Create the tree */
- treectrl = new wxTreeCtrl( this, TreeCtrl_Event,
- wxDefaultPosition, wxDefaultSize,
- wxTR_HIDE_ROOT | wxTR_LINES_AT_ROOT|
- wxTR_NO_LINES |
- wxTR_HAS_BUTTONS | wxTR_TWIST_BUTTONS |
- wxTR_MULTIPLE | wxTR_EXTENDED );
-
- /* Add everything to the panel */
- sizer = new wxBoxSizer( wxHORIZONTAL );
- SetSizer( sizer );
- sizer->Add( treectrl, 1, wxEXPAND );
- sizer->Layout();
- sizer->Fit( this );
-
- /* Create image list */
- wxImageList *p_images = new wxImageList( 16 , 16, TRUE );
-
- /* FIXME: absolutely needs to be in the right order FIXME */
- p_images->Add( wxIcon( type_unknown_xpm ) );
- p_images->Add( wxIcon( type_afile_xpm ) );
- p_images->Add( wxIcon( type_vfile_xpm ) );
- p_images->Add( wxIcon( type_directory_xpm ) );
- p_images->Add( wxIcon( type_disc_xpm ) );
- p_images->Add( wxIcon( type_cdda_xpm ) );
- p_images->Add( wxIcon( type_card_xpm ) );
- p_images->Add( wxIcon( type_net_xpm ) );
- p_images->Add( wxIcon( type_playlist_xpm ) );
- p_images->Add( wxIcon( type_node_xpm ) );
- treectrl->AssignImageList( p_images );
-
- /* Reduce font size */
- wxFont font = treectrl->GetFont(); font.SetPointSize(9);
- treectrl->SetFont( font );
-
-#if wxUSE_DRAG_AND_DROP
- /* Associate drop targets with the playlist */
- SetDropTarget( new DragAndDrop( p_intf, true ) );
-#endif
-
- /* Update the playlist */
- Rebuild( true );
-
- /*
- * We want to be notified of playlist changes
- */
-
- /* Some global changes happened -> Rebuild all */
- var_AddCallback( p_playlist, "intf-change", PlaylistChanged, this );
-
- /* We went to the next item */
- var_AddCallback( p_playlist, "playlist-current", PlaylistNext, this );
-
- /* One item has been updated */
- var_AddCallback( p_playlist, "item-change", ItemChanged, this );
-
- var_AddCallback( p_playlist, "item-append", ItemAppended, this );
- var_AddCallback( p_playlist, "item-deleted", ItemDeleted, this );
-}
-
-PlaylistManager::~PlaylistManager()
-{
- if( p_playlist == NULL ) return;
-
- var_DelCallback( p_playlist, "item-change", ItemChanged, this );
- var_DelCallback( p_playlist, "playlist-current", PlaylistNext, this );
- var_DelCallback( p_playlist, "intf-change", PlaylistChanged, this );
- var_DelCallback( p_playlist, "item-append", ItemAppended, this );
- var_DelCallback( p_playlist, "item-deleted", ItemDeleted, this );
- vlc_object_release( p_playlist );
-}
-
-/*****************************************************************************
- * PlaylistChanged: callback triggered by the intf-change playlist variable
- * We don't rebuild the playlist directly here because we don't want the
- * caller to block for a too long time.
- *****************************************************************************/
-static int PlaylistChanged( vlc_object_t *p_this, const char *psz_variable,
- vlc_value_t oval, vlc_value_t nval, void *param )
-{
- PlaylistManager *p_playlist = (PlaylistManager *)param;
- p_playlist->b_need_update = true;
- return VLC_SUCCESS;
-}
-
-/*****************************************************************************
- * Next: callback triggered by the playlist-current playlist variable
- *****************************************************************************/
-static int PlaylistNext( vlc_object_t *p_this, const char *psz_variable,
- vlc_value_t oval, vlc_value_t nval, void *param )
-{
- PlaylistManager *p_playlist = (PlaylistManager *)param;
-
- wxCommandEvent event( wxEVT_PLAYLIST, UpdateItem_Event );
- event.SetInt( oval.i_int );
- p_playlist->AddPendingEvent( event );
- event.SetInt( nval.i_int );
- p_playlist->AddPendingEvent( event );
-
- return VLC_SUCCESS;
-}
-
-/*****************************************************************************
- * Update functions
- *****************************************************************************/
-void PlaylistManager::CreateNode( playlist_item_t *p_node, wxTreeItemId parent)
-{
- wxTreeItemId node =
- treectrl->AppendItem( parent, wxL2U( p_node->p_input->psz_name ), -1, -1,
- new PlaylistItem( p_node ) );
- treectrl->SetItemImage( node, p_node->p_input->i_type );
-
- UpdateNodeChildren( p_node, node );
-}
-
-void PlaylistManager::UpdateNode( playlist_item_t *p_node, wxTreeItemId node )
-{
- wxTreeItemIdValue cookie;
- wxTreeItemId child;
-
- for( int i = 0; i < p_node->i_children ; i++ )
- {
- if( !i ) child = treectrl->GetFirstChild( node, cookie);
- else child = treectrl->GetNextChild( node, cookie );
-
- if( !child.IsOk() )
- {
- /* Not enough children */
- CreateNode( p_node->pp_children[i], node );
- /* Keep the tree pointer up to date */
- child = treectrl->GetNextChild( node, cookie );
- }
- }
-
- treectrl->SetItemImage( node, p_node->p_input->i_type );
-
-}
-
-void PlaylistManager::UpdateNodeChildren( playlist_item_t *p_node,
- wxTreeItemId node )
-{
- for( int i = 0; i< p_node->i_children ; i++ )
- {
- /* Append the item */
- if( p_node->pp_children[i]->i_children == -1 )
- {
- wxTreeItemId item =
- treectrl->AppendItem( node,
- wxL2U( p_node->pp_children[i]->p_input->psz_name ), -1,-1,
- new PlaylistItem( p_node->pp_children[i]) );
-
- UpdateTreeItem( item );
- }
- else
- {
- CreateNode( p_node->pp_children[i], node );
- }
- }
-}
-
-void PlaylistManager::UpdateTreeItem( wxTreeItemId item )
-{
- if( ! item.IsOk() ) return;
-
- wxTreeItemData *p_data = treectrl->GetItemData( item );
- if( !p_data ) return;
-
- LockPlaylist( p_intf->p_sys, p_playlist );
- playlist_item_t *p_item =
- playlist_ItemGetById( p_playlist, ((PlaylistItem *)p_data)->i_id,
- true );
- if( !p_item )
- {
- UnlockPlaylist( p_intf->p_sys, p_playlist );
- return;
- }
-
- wxString msg;
- wxString duration = wxU( "" );
-
- char *psz_artist = input_item_GetArtist( p_item->p_input );
- if( !psz_artist )
- psz_artist = strdup( "" );
-
- char *psz_name = input_item_GetName( p_item->p_input );
- if( !psz_name )
- psz_name = strdup( "" );
-
- char psz_duration[MSTRTIME_MAX_SIZE];
- mtime_t dur = input_item_GetDuration( p_item->p_input );
-
- if( dur != -1 )
- {
- secstotimestr( psz_duration, dur/1000000 );
- duration.Append( wxU( " ( " ) + wxString( wxU( psz_duration ) ) +
- wxU( " )" ) );
- }
-
- if( !strcmp( psz_artist, "" ) || p_item->p_input->b_fixed_name == true )
- {
- msg = wxString( wxU( psz_name ) ) + duration;
- }
- else
- {
- msg = wxString(wxU( psz_artist )) + wxT(" - ") +
- wxString(wxU(psz_name)) + duration;
- }
- free( psz_artist );
- free( psz_name );
- treectrl->SetItemText( item , msg );
- treectrl->SetItemImage( item, p_item->p_input->i_type );
-
- if( p_playlist->status.p_item == p_item )
- {
- treectrl->SetItemBold( item, true );
- while( treectrl->GetItemParent( item ).IsOk() )
- {
- item = treectrl->GetItemParent( item );
- treectrl->Expand( item );
- }
- }
- else
- {
- treectrl->SetItemBold( item, false );
- }
- UnlockPlaylist( p_intf->p_sys, p_playlist );
-}
-
-void PlaylistManager::AppendItem( wxCommandEvent& event )
-{
- playlist_add_t *p_add = (playlist_add_t *)event.GetClientData();
- playlist_item_t *p_item = NULL;
- wxTreeItemId item, node;
-
- i_items_to_append--;
-
- /* No need to do anything if the playlist is going to be rebuilt */
- if( b_need_update ) return;
-
- //if( p_add->i_view != i_current_view ) goto update;
-
- node = FindItem( treectrl->GetRootItem(), p_add->i_node );
- if( !node.IsOk() ) goto update;
-
- p_item = playlist_ItemGetById( p_playlist, p_add->i_item, false );
- if( !p_item ) goto update;
-
- item = FindItem( treectrl->GetRootItem(), p_add->i_item );
- if( item.IsOk() ) goto update;
-
- item = treectrl->AppendItem( node, wxL2U( p_item->p_input->psz_name ), -1,-1,
- new PlaylistItem( p_item ) );
- treectrl->SetItemImage( item, p_item->p_input->i_type );
-
- if( item.IsOk() && p_item->i_children == -1 ) UpdateTreeItem( item );
-
-update:
- return;
-}
-
-void PlaylistManager::UpdateItem( int i )
-{
- if( i < 0 ) return; /* Sanity check */
-
- wxTreeItemId item = FindItem( treectrl->GetRootItem(), i );
- if( item.IsOk() ) UpdateTreeItem( item );
-}
-
-void PlaylistManager::RemoveItem( int i )
-{
- if( i <= 0 ) return; /* Sanity check */
-
- wxTreeItemId item = FindItem( treectrl->GetRootItem(), i );
- if( item.IsOk() )
- {
- treectrl->Delete( item );
-
- /* Invalidate cache */
- i_cached_item_id = -1;
- }
-}
-
-/* This function is called on a regular basis */
-void PlaylistManager::Update()
-{
- i_update_counter++;
-
- /* If the playlist isn't show there's no need to update it */
- if( !IsShown() ) return;
-
- if( this->b_need_update )
- {
- this->b_need_update = false;
- Rebuild( true );
- }
-
- /* Updating the playing status every 0.5s is enough */
- if( i_update_counter % 5 ) return;
-}
-
-/**********************************************************************
- * Rebuild the playlist
- **********************************************************************/
-void PlaylistManager::Rebuild( bool b_root )
-{
- i_items_to_append = 0;
- i_cached_item_id = -1;
-
- treectrl->DeleteAllItems();
- treectrl->AddRoot( wxU(_("root" )), -1, -1,
- new PlaylistItem( p_playlist->p_root_category ) );
-
- wxTreeItemId root = treectrl->GetRootItem();
- UpdateNode( p_playlist->p_root_category, root );
-}
-
-/**********************************************************************
- * Search functions (internal)
- **********************************************************************/
-
-/* Find a wxItem from a playlist id */
-wxTreeItemId PlaylistManager::FindItem( wxTreeItemId root, int i_id )
-{
- wxTreeItemIdValue cookie;
- PlaylistItem *p_wxcurrent;
- wxTreeItemId dummy, search, item, child;
-
- if( i_id < 0 ) return dummy;
- if( i_cached_item_id == i_id ) return cached_item;
-
- p_wxcurrent = (PlaylistItem *)treectrl->GetItemData( root );
- if( !p_wxcurrent ) return dummy;
-
- if( p_wxcurrent->i_id == i_id )
- {
- i_cached_item_id = i_id;
- cached_item = root;
- return root;
- }
-
- item = treectrl->GetFirstChild( root, cookie );
- while( item.IsOk() )
- {
- p_wxcurrent = (PlaylistItem *)treectrl->GetItemData( item );
- if( !p_wxcurrent )
- {
- item = treectrl->GetNextChild( root, cookie );
- continue;
- }
-
- if( p_wxcurrent->i_id == i_id )
- {
- i_cached_item_id = i_id;
- cached_item = item;
- return item;
- }
-
- if( treectrl->ItemHasChildren( item ) )
- {
- wxTreeItemId search = FindItem( item, i_id );
- if( search.IsOk() ) return search;
- }
-
- item = treectrl->GetNextChild( root, cookie );
- }
-
- return dummy;
-}
-
-/********************************************************************
- * Events
- ********************************************************************/
-void PlaylistManager::OnActivateItem( wxTreeEvent& event )
-{
- playlist_item_t *p_item, *p_node;
- wxTreeItemId parent = treectrl->GetItemParent( event.GetItem() );
- PlaylistItem *p_wxitem = (PlaylistItem *)
- treectrl->GetItemData( event.GetItem() );
-
- if( !p_wxitem || !parent.IsOk() ) return;
-
- PlaylistItem *p_wxparent = (PlaylistItem *)treectrl->GetItemData( parent );
- if( !p_wxparent ) return;
-
- LockPlaylist( p_intf->p_sys, p_playlist );
- p_item = playlist_ItemGetById( p_playlist, p_wxitem->i_id, true );
- p_node = playlist_ItemGetById( p_playlist, p_wxparent->i_id, true );
- if( !p_item || p_item->i_children >= 0 )
- {
- p_node = p_item;
- p_item = NULL;
- }
- playlist_Control( p_playlist, PLAYLIST_VIEWPLAY, true, p_node, p_item );
- UnlockPlaylist( p_intf->p_sys, p_playlist );
-}
-
-void PlaylistManager::OnPlaylistEvent( wxCommandEvent& event )
-{
- switch( event.GetId() )
- {
- case UpdateItem_Event:
- UpdateItem( event.GetInt() );
- break;
- case AppendItem_Event:
- AppendItem( event );
- break;
- case RemoveItem_Event:
- RemoveItem( event.GetInt() );
- break;
- }
-}
-
-/*****************************************************************************
- * ItemChanged: callback triggered by the item-change playlist variable
- *****************************************************************************/
-static int ItemChanged( vlc_object_t *p_this, const char *psz_variable,
- vlc_value_t old_val, vlc_value_t new_val, void *param )
-{
- PlaylistManager *p_playlist = (PlaylistManager *)param;
-
- wxCommandEvent event( wxEVT_PLAYLIST, UpdateItem_Event );
- event.SetInt( new_val.i_int );
- p_playlist->AddPendingEvent( event );
-
- return VLC_SUCCESS;
-}
-static int ItemDeleted( vlc_object_t *p_this, const char *psz_variable,
- vlc_value_t old_val, vlc_value_t new_val, void *param )
-{
- PlaylistManager *p_playlist = (PlaylistManager *)param;
-
- wxCommandEvent event( wxEVT_PLAYLIST, RemoveItem_Event );
- event.SetInt( new_val.i_int );
- p_playlist->AddPendingEvent( event );
-
- return VLC_SUCCESS;
-}
-
-static int ItemAppended( vlc_object_t *p_this, const char *psz_variable,
- vlc_value_t oval, vlc_value_t nval, void *param )
-{
- PlaylistManager *p_playlist = (PlaylistManager *)param;
-
- playlist_add_t *p_add = (playlist_add_t *)malloc(sizeof( playlist_add_t));
- memcpy( p_add, nval.p_address, sizeof( playlist_add_t ) );
-
- if( ++p_playlist->i_items_to_append >= 50 )
- {
- /* Too many items waiting to be added, it will be quicker to rebuild
- * the whole playlist */
- p_playlist->b_need_update = true;
- return VLC_SUCCESS;
- }
-
- wxCommandEvent event( wxEVT_PLAYLIST, AppendItem_Event );
- event.SetClientData( (void *)p_add );
- p_playlist->AddPendingEvent( event );
-
- return VLC_SUCCESS;
-}
-}
+++ /dev/null
-/*****************************************************************************
- * playlist_manager.hpp: Header for the playlist manager
- *****************************************************************************
- * Copyright (C) 1999-2005 the VideoLAN team
- * $Id$
- *
- * Authors: Clément Stenac <zorglub@videolan.org>
- * Gildas Bazin <gbazin@videolan.org>
- *
- * 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., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
- *****************************************************************************/
-
-#ifndef _WXVLC_PLAYLIST_MANAGER_H_
-#define _WXVLC_PLAYLIST_MANAGER_H_
-
-#include "wxwidgets.hpp"
-#include <wx/treectrl.h>
-
-namespace wxvlc
-{
-/* PlaylistManager */
-class PlaylistManager: public wxPanel
-{
-public:
- /* Constructor */
- PlaylistManager( intf_thread_t *p_intf, wxWindow *p_parent );
- virtual ~PlaylistManager();
-
- void Update();
-
- bool b_need_update;
- int i_items_to_append;
-
-private:
- DECLARE_EVENT_TABLE();
-
- /* Update */
- void Rebuild( bool );
- void CreateNode( playlist_item_t*, wxTreeItemId );
- void UpdateNode( playlist_item_t*, wxTreeItemId );
- void UpdateNodeChildren( playlist_item_t*, wxTreeItemId );
- void UpdateTreeItem( wxTreeItemId );
-
- void UpdateItem( int );
- void AppendItem( wxCommandEvent& );
- void RemoveItem( int );
-
- wxTreeItemId FindItem( wxTreeItemId, int );
-
- /* Events */
- void OnActivateItem( wxTreeEvent& event );
- /* Custom events */
- void OnPlaylistEvent( wxCommandEvent& event );
-
- /* Simple cache for FindItem() */
- int i_cached_item_id;
- wxTreeItemId cached_item;
-
- intf_thread_t *p_intf;
- playlist_t *p_playlist;
- wxTreeCtrl *treectrl;
- wxSizer *sizer;
-
- int i_update_counter;
-};
-
-} // end of wxvlc namespace
-
-#endif
+++ /dev/null
-/*****************************************************************************
- * streamdata.cpp: streaming/transcoding data
- *****************************************************************************
- * Copyright (C) 2000-2005 the VideoLAN team
- * $Id$
- *
- * Authors: Clément Stenac <zorglub@videolan.org>
- *
- * 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., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
- *****************************************************************************/
-
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include <vlc_common.h>
-#include <wx/string.h>
-#include "streamdata.h"
-
-
-const struct codec vcodecs_array[] =
-{
- { "MPEG-1 Video" , "mp1v" , N_("MPEG-1 Video codec (useable with MPEG PS, " \
- "MPEG TS, MPEG1, OGG and RAW)"),
-// {MUX_PS, MUX_TS, MUX_MPEG, MUX_OGG, MUX_AVI, MUX_RAW, -1,-1,-1 } },
- {MUX_PS, MUX_TS, MUX_MPEG, MUX_OGG, MUX_RAW, -1,-1,-1,-1 } },
- { "MPEG-2 Video" , "mp2v" , N_("MPEG-2 Video codec (useable with MPEG PS, " \
- "MPEG TS, MPEG1, OGG and RAW)"),
-// {MUX_PS, MUX_TS, MUX_MPEG, MUX_OGG, MUX_AVI, MUX_RAW, -1,-1,-1 } },
- {MUX_PS, MUX_TS, MUX_MPEG, MUX_OGG, MUX_RAW, -1,-1,-1,-1 } },
- { "MPEG-4 Video" , "mp4v" , N_("MPEG-4 Video codec (useable with MPEG PS, " \
- "MPEG TS, MPEG1, ASF, MPEG4, OGG and RAW)"),
-// {MUX_PS,MUX_TS,MUX_MPEG,MUX_ASF,MUX_MP4,MUX_OGG,MUX_AVI,MUX_RAW, -1} },
- {MUX_PS,MUX_TS,MUX_MPEG,MUX_ASF,MUX_MP4,MUX_OGG,MUX_RAW, -1,-1} },
- { "DIVX 1" ,"DIV1",N_("DivX first version (useable with MPEG TS, MPEG1, ASF" \
- " and OGG)") ,
-// {MUX_TS , MUX_MPEG , MUX_ASF , MUX_OGG , MUX_AVI , -1,-1,-1,-1 } },
- {MUX_TS , MUX_MPEG , MUX_ASF , MUX_OGG , -1 , -1,-1,-1,-1 } },
- { "DIVX 2" ,"DIV2",N_("DivX second version (useable with MPEG TS, MPEG1, ASF" \
- " and OGG)") ,
- {MUX_TS , MUX_MPEG , MUX_ASF , MUX_OGG , -1 , -1,-1,-1,-1 } },
- { "DIVX 3" ,"DIV3",N_("DivX third version (useable with MPEG TS, MPEG1, ASF" \
- " and OGG)") ,
- {MUX_TS , MUX_MPEG , MUX_ASF , MUX_OGG , -1 , -1,-1,-1,-1 } },
- { "H 263" , "h263" , N_("H263 is a video codec optimized for videoconference " \
- "(low rates, useable with MPEG TS)") ,
- { MUX_TS, -1, -1,-1,-1,-1,-1,-1,-1 } },
- { "H 264" , "h264" , N_("H264 is a new video codec (useable with MPEG TS " \
- "and MPEG4)") ,
- { MUX_TS, MUX_MP4, MUX_ASF,-1,-1,-1,-1,-1,-1 } },
- { "WMV 1" , "WMV1", N_("WMV (Windows Media Video) 7 (useable with MPEG TS, " \
- "MPEG1, ASF and OGG)") ,
- {MUX_TS , MUX_MPEG , MUX_ASF , MUX_OGG , -1 , -1,-1,-1,-1 } },
- { "WMV 2" , "WMV2", N_("WMV (Windows Media Video) 8 (useable with MPEG TS, " \
- "MPEG1, ASF and OGG)") ,
- {MUX_TS , MUX_MPEG , MUX_ASF , MUX_OGG , -1 , -1,-1,-1,-1 } },
-#ifdef WIN32
- { "WMV 3" , "WMV3", N_("WMV (Windows Media Video) 9 (useable with MPEG TS, " \
- "MPEG1, ASF and OGG)") ,
- {MUX_TS , MUX_MPEG , MUX_ASF , MUX_OGG , -1 , -1,-1,-1,-1 } },
-#endif
- { "MJPEG" , "MJPG", N_("MJPEG consists of a series of JPEG pictures " \
- "(useable with MPEG TS, MPEG1, ASF and OGG)") ,
- {MUX_TS , MUX_MPEG , MUX_ASF , MUX_OGG , -1 , -1,-1,-1,-1 } },
- { "Theora" , "theo", N_("Theora is a free general-purpose codec (useable " \
- "with MPEG TS)"),
- {MUX_TS, MUX_OGG,-1,-1,-1,-1,-1,-1,-1} },
- { "Dummy", "dummy", N_("Dummy codec (do not transcode, useable with all " \
- "encapsulation formats)") ,
- {MUX_PS,MUX_TS,MUX_MPEG,MUX_ASF,MUX_MP4,MUX_OGG,MUX_WAV,MUX_RAW,MUX_MOV}},
- { NULL,NULL,NULL , {-1,-1,-1,-1,-1,-1,-1,-1,-1}} /* Do not remove me */
-};
-
-const struct codec acodecs_array[] =
-{
- { "MPEG Audio" , "mpga" , N_("The standard MPEG audio (1/2) format " \
- "(useable with MPEG PS, MPEG TS, MPEG1, ASF, OGG and RAW)") ,
-// {MUX_PS,MUX_TS,MUX_MPEG,MUX_ASF,MUX_OGG,MUX_AVI,MUX_RAW, -1,-1} },
- {MUX_PS,MUX_TS,MUX_MPEG,MUX_ASF,MUX_OGG,MUX_RAW, -1,-1,-1} },
- { "MP3" , "mp3" , N_("MPEG Audio Layer 3 (useable with MPEG PS, MPEG TS, " \
- "MPEG1, ASF, OGG and RAW)") ,
-// {MUX_PS,MUX_TS,MUX_MPEG,MUX_ASF,MUX_OGG,MUX_AVI,MUX_RAW, -1,-1} },
- {MUX_PS,MUX_TS,MUX_MPEG,MUX_ASF,MUX_OGG,MUX_RAW, -1,-1, -1} },
- { "MPEG 4 Audio" , "mp4a" , N_("Audio format for MPEG4 (useable with " \
- "MPEG TS and MPEG4)") ,
- {MUX_TS, MUX_MP4, -1,-1,-1,-1,-1,-1,-1 } },
- { "A/52" , "a52" , N_("DVD audio format (useable with MPEG PS, MPEG TS, " \
- "MPEG1, ASF, OGG and RAW)") ,
-// {MUX_PS,MUX_TS,MUX_MPEG,MUX_ASF,MUX_OGG,MUX_AVI,MUX_RAW, -1,-1} },
- {MUX_PS,MUX_TS,MUX_MPEG,MUX_ASF,MUX_OGG,MUX_RAW, -1,-1,-1} },
- { "Vorbis" , "vorb" , N_("Vorbis is a free audio codec (useable with OGG)") ,
- {MUX_OGG, -1,-1,-1,-1,-1,-1,-1,-1} },
- { "FLAC" , "flac" , N_("FLAC is a lossless audio codec (useable with OGG " \
- "and RAW)") ,
- {MUX_OGG , MUX_RAW, -1,-1,-1,-1,-1,-1,-1} },
- { "Speex" , "spx" , N_("A free audio codec dedicated to compression of " \
- "voice (useable with OGG)") ,
- {MUX_OGG, -1,-1,-1,-1,-1,-1,-1,-1} },
- { "Uncompressed, integer" , "s16l" , N_("Uncompressed audio samples " \
- "(useable with WAV)"),
- {MUX_WAV, -1,-1,-1,-1,-1,-1,-1,-1} },
- { "Uncompressed, floating" , "fl32" , N_("Uncompressed audio samples " \
- "(useable with WAV)"),
- {MUX_WAV, -1,-1,-1,-1,-1,-1,-1,-1} },
- { "Dummy", "dummy", N_("Dummy codec (do not transcode, useable with all " \
- "encapsulation formats)") ,
-// {MUX_PS,MUX_TS,MUX_MPEG,MUX_ASF,MUX_MP4,MUX_OGG,MUX_AVI,MUX_RAW,MUX_MOV}},
- {MUX_PS,MUX_TS,MUX_MPEG,MUX_ASF,MUX_MP4,MUX_OGG,MUX_RAW,MUX_MOV,MUX_WAV}},
- { NULL,NULL,NULL , {-1,-1,-1,-1,-1,-1,-1,-1,-1}} /* Do not remove me */
-};
-
-const struct method methods_array[] =
-{
- {"rtp{",N_("RTP Unicast"), N_("Stream to a single computer."),
- N_("Enter the address of the computer to stream to."),
- { MUX_TS, -1,-1,-1,-1,-1,-1,-1,-1 } },
- {"rtp{",N_("RTP Multicast"),
- N_("Stream to a dynamic group of computers on a "
- "multicast-enabled network. This is the most efficient method "
- "to stream to several computers, but it does not work over the Internet."),
- N_("Enter the multicast address to stream to. "
- "This must be an IP address between 224.0.0.0 an 239.255.255.255. "
- "For private use, enter an address beginning with 239.255."),
- { MUX_TS, -1,-1,-1,-1,-1,-1,-1,-1 } },
- {"std{access=http,","HTTP",
- N_("Stream to several computers. This method is "
- "less efficient, as the server needs to send the "
- "stream several times."),
- N_("Enter the local addresses you want to listen to. Do not enter "
- "anything if you want to listen to all adresses or if you don't "
- "understand. This is generally the best thing to do. Other computers "
- "can then access the stream at http://yourip:8080 by default."),
- { MUX_TS, MUX_PS, MUX_MPEG, MUX_OGG, MUX_RAW, MUX_ASF, -1,-1,-1} },
- { NULL, NULL,NULL,NULL , {-1,-1,-1,-1,-1,-1,-1,-1,-1}} /* Do not remove me */
-};
-
-
-const struct encap encaps_array[] =
-{
- { MUX_PS, "ps","MPEG PS", N_("MPEG Program Stream") },
- { MUX_TS, "ts","MPEG TS", N_("MPEG Transport Stream") },
- { MUX_MPEG, "ps", "MPEG 1", N_("MPEG 1 Format") },
- { MUX_OGG, "ogg", "OGG", "OGG" },
- { MUX_RAW, "raw", "RAW", "RAW" },
- { MUX_ASF, "asf","ASF", "ASF" },
-// { MUX_AVI, "avi","AVI", "AVI" },
- { MUX_MP4, "mp4","MP4", "MPEG4" },
- { MUX_MOV, "mov","MOV", "MOV" },
- { MUX_WAV, "wav","WAV", "WAV" },
- { -1 , NULL,NULL , NULL } /* Do not remove me */
-};
+++ /dev/null
-/*****************************************************************************
- * streamdata.h: streaming/transcoding data
- *****************************************************************************
- * Copyright (C) 2000-2005 the VideoLAN team
- * $Id$
- *
- * Authors: Clément Stenac <zorglub@videolan.org>
- *
- * 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., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
- *****************************************************************************/
-
-
-#define MUXERS_NUMBER 9
-
-// Do not count dummy here !
-#ifdef WIN32
-#define VCODECS_NUMBER 13
-#else
-#define VCODECS_NUMBER 12
-#endif
-
-#define ACODECS_NUMBER 9
-
-#define MUX_PS 0
-#define MUX_TS 1
-#define MUX_MPEG 2
-#define MUX_OGG 3
-#define MUX_RAW 4
-#define MUX_ASF 5
-#define MUX_AVI 6
-#define MUX_MP4 7
-#define MUX_MOV 8
-#define MUX_WAV 9
-
-/* Muxer / Codecs / Access_out compatibility tables */
-
-
-struct codec {
- char *psz_display;
- char *psz_codec;
- char *psz_descr;
- int muxers[MUXERS_NUMBER];
-};
-
-extern const struct codec vcodecs_array[];
-extern const struct codec acodecs_array[];
-
-
-struct method {
- char *psz_access;
- char *psz_method;
- char *psz_descr;
- char *psz_address;
- int muxers[MUXERS_NUMBER];
-};
-
-extern const struct method methods_array[];
-
-
-struct encap {
- int id;
- char *psz_mux;
- char *psz_encap;
- char *psz_descr;
-};
-
-extern const struct encap encaps_array[];
-
-
-/* Bitrates arrays */
-static const wxString vbitrates_array[] =
-{
- wxT("3072"),
- wxT("2048"),
- wxT("1024"),
- wxT("768"),
- wxT("512"),
- wxT("384"),
- wxT("256"),
- wxT("192"),
- wxT("128"),
- wxT("96"),
- wxT("64"),
- wxT("32"),
- wxT("16")
-};
-
-static const wxString abitrates_array[] =
-{
- wxT("512"),
- wxT("256"),
- wxT("192"),
- wxT("128"),
- wxT("96"),
- wxT("64"),
- wxT("32"),
- wxT("16")
-};
+++ /dev/null
-/*****************************************************************************
- * timer.cpp : wxWindows plugin for vlc
- *****************************************************************************
- * Copyright (C) 2000-2005 the VideoLAN team
- * $Id$
- *
- * Authors: Gildas Bazin <gbazin@videolan.org>
- *
- * 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., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
- *****************************************************************************/
-
-/*****************************************************************************
- * Preamble
- *****************************************************************************/
-#include "timer.hpp"
-#include "input_manager.hpp"
-#include "interface.hpp"
-#include "vlc_meta.h"
-
-//void DisplayStreamDate( wxControl *, intf_thread_t *, int );
-
-/* Callback prototypes */
-static int PopupMenuCB( vlc_object_t *p_this, const char *psz_variable,
- vlc_value_t old_val, vlc_value_t new_val, void *param );
-static int IntfShowCB( vlc_object_t *p_this, const char *psz_variable,
- vlc_value_t old_val, vlc_value_t new_val, void *param );
-
-/*****************************************************************************
- * Constructor.
- *****************************************************************************/
-Timer::Timer( intf_thread_t *_p_intf, Interface *_p_main_interface )
-{
- p_intf = _p_intf;
- p_main_interface = _p_main_interface;
- b_init = 0;
-
- var_AddCallback( p_intf->p_libvlc, "intf-show", IntfShowCB, p_intf );
-
- /* Register callback for the intf-popupmenu variable */
- var_AddCallback( p_intf->p_libvlc, "intf-popupmenu", PopupMenuCB, p_intf );
-
- Start( 100 /*milliseconds*/, wxTIMER_CONTINUOUS );
-}
-
-Timer::~Timer()
-{
- var_DelCallback( p_intf->p_libvlc, "intf-show", IntfShowCB, p_intf );
-
- /* Unregister callback */
- var_DelCallback( p_intf->p_libvlc, "intf-popupmenu", PopupMenuCB, p_intf );
-}
-
-/*****************************************************************************
- * Private methods.
- *****************************************************************************/
-
-/*****************************************************************************
- * 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()
-{
-#if defined( __WXMSW__ ) /* Work-around a bug with accelerators */
- if( !b_init )
- {
- p_main_interface->Init();
- b_init = true;
- }
-#endif
-
- vlc_mutex_lock( &p_intf->change_lock );
-
- /* Call update */
- p_main_interface->input_manager->Update();
- p_main_interface->Update();
-
- /* Show the interface, if requested */
- if( p_intf->p_sys->b_intf_show )
- {
- p_main_interface->Raise();
- p_main_interface->Show();
- p_intf->p_sys->b_intf_show = false;
- }
-
- if( !vlc_object_alive( p_intf ) )
- {
- vlc_mutex_unlock( &p_intf->change_lock );
-
- /* Prepare to die, young Skywalker */
- p_main_interface->Close(TRUE);
- return;
- }
-
- vlc_mutex_unlock( &p_intf->change_lock );
-}
-
-/*****************************************************************************
- * PopupMenuCB: callback triggered by the intf-popupmenu playlist variable.
- * We don't show the menu directly here because we don't want the
- * caller to block for a too long time.
- *****************************************************************************/
-static int PopupMenuCB( vlc_object_t *p_this, const char *psz_variable,
- vlc_value_t old_val, vlc_value_t new_val, void *param )
-{
- intf_thread_t *p_intf = (intf_thread_t *)param;
-
- if( p_intf->p_sys->pf_show_dialog )
- {
- p_intf->p_sys->pf_show_dialog( p_intf, INTF_DIALOG_POPUPMENU,
- new_val.b_bool, 0 );
- }
-
- return VLC_SUCCESS;
-}
-
-
-/*****************************************************************************
- * IntfShowCB: callback triggered by the intf-show playlist variable.
- *****************************************************************************/
-static int IntfShowCB( vlc_object_t *p_this, const char *psz_variable,
- vlc_value_t old_val, vlc_value_t new_val, void *param )
-{
- intf_thread_t *p_intf = (intf_thread_t *)param;
- p_intf->p_sys->b_intf_show = true;
-
- return VLC_SUCCESS;
-}
+++ /dev/null
-/*****************************************************************************
- * timer.hpp: Timer headers
- *****************************************************************************
- * Copyright (C) 1999-2005 the VideoLAN team
- * $Id$
- *
- * Authors: Gildas Bazin <gbazin@videolan.org>
- *
- * 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., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
- *****************************************************************************/
-
-#include "wxwidgets.hpp"
-
-namespace wxvlc
-{
- class InputManager;
- class Interface;
-
- 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;
- bool b_init;
- int i_old_playing_status;
- int i_old_rate;
-
- InputManager *msm;
- };
-
-}
+++ /dev/null
-/*****************************************************************************
- * video.cpp : wxWidgets plugin for vlc
- *****************************************************************************
- * Copyright (C) 2000-2004, 2003 the VideoLAN team
- * $Id$
- *
- * Authors: Gildas Bazin <gbazin@videolan.org>
- *
- * 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., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
- *****************************************************************************/
-
-/*****************************************************************************
- * Preamble
- *****************************************************************************/
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include <vlc_common.h>
-#include <vlc_vout.h>
-#include <vlc_interface.h>
-
-#include "video.hpp"
-#include "interface.hpp"
-
-static void *GetWindow( intf_thread_t *p_intf, vout_thread_t *,
- int *pi_x_hint, int *pi_y_hint,
- unsigned int *pi_width_hint,
- unsigned int *pi_height_hint );
-
-static void ReleaseWindow( intf_thread_t *p_intf, void *p_window );
-
-static int ControlWindow( intf_thread_t *p_intf, void *p_window,
- int i_query, va_list args );
-
-/* IDs for the controls and the menu commands */
-enum
-{
- UpdateSize_Event = wxID_HIGHEST + 1,
- UpdateHide_Event,
- SetStayOnTop_Event,
- ID_HIDE_TIMER
-};
-
-DEFINE_LOCAL_EVENT_TYPE( wxEVT_VLC_VIDEO );
-
-BEGIN_EVENT_TABLE(VideoWindow, wxWindow)
- EVT_CUSTOM( wxEVT_SIZE, UpdateSize_Event, VideoWindow::UpdateSize )
- EVT_CUSTOM( wxEVT_SIZE, UpdateHide_Event, VideoWindow::UpdateHide )
- EVT_COMMAND( SetStayOnTop_Event, wxEVT_VLC_VIDEO,
- VideoWindow::OnControlEvent )
- EVT_TIMER( ID_HIDE_TIMER, VideoWindow::OnHideTimer )
-END_EVENT_TABLE()
-
-/*****************************************************************************
- * Public methods.
- *****************************************************************************/
-wxWindow *CreateVideoWindow( intf_thread_t *p_intf, wxWindow *p_parent )
-{
- return new VideoWindow( p_intf, p_parent );
-}
-
-void UpdateVideoWindow( intf_thread_t *p_intf, wxWindow *p_window )
-{
-#if wxCHECK_VERSION(2,5,3)
- if( !p_intf->p_sys->b_video_autosize ) return;
-
- if( p_window && mdate() - ((VideoWindow *)p_window)->i_creation_date < 2000000 )
- return; /* Hack to prevent saving coordinates if window is not yet
- * properly created. Yuck :( */
-
- if( p_window && p_intf->p_sys->p_video_sizer && p_window->IsShown() )
- p_intf->p_sys->p_video_sizer->SetMinSize( p_window->GetSize() );
-#endif
-}
-
-/*****************************************************************************
- * Constructor.
- *****************************************************************************/
-VideoWindow::VideoWindow( intf_thread_t *_p_intf, wxWindow *_p_parent ):
- wxWindow( _p_parent, -1, wxDefaultPosition, wxDefaultSize, wxCLIP_CHILDREN )
-{
- /* Initializations */
- p_intf = _p_intf;
- p_parent = _p_parent;
- p_child_window = 0;
-
- vlc_mutex_init( &lock );
-
- b_auto_size = p_intf->p_sys->b_video_autosize;
-
- p_vout = NULL;
- i_creation_date = 0;
- m_hide_timer.SetOwner( this, ID_HIDE_TIMER );
-
- p_intf->pf_request_window = ::GetWindow;
- p_intf->pf_release_window = ::ReleaseWindow;
- p_intf->pf_control_window = ::ControlWindow;
-
- p_intf->p_sys->p_video_window = this;
-
- wxSize child_size = wxSize(0,0);
- if( !b_auto_size )
- {
- WindowSettings *ws = p_intf->p_sys->p_window_settings;
- wxPoint p; bool b_shown;
-
- // Maybe this size should be an option
- child_size = wxSize( wxSystemSettings::GetMetric(wxSYS_SCREEN_X) / 2,
- wxSystemSettings::GetMetric(wxSYS_SCREEN_Y) / 2 );
-
- ws->GetSettings( WindowSettings::ID_VIDEO, b_shown, p, child_size );
- SetSize( child_size );
- }
-
-#ifdef __WXGTK__
- p_child_window = new wxWindow( this, -1, wxDefaultPosition, child_size,
- wxCLIP_CHILDREN );
-#endif
-
- if( !b_auto_size )
- {
- SetBackgroundColour( *wxBLACK );
- if( p_child_window ) p_child_window->SetBackgroundColour( *wxBLACK );
- }
-
- if( p_child_window ) p_child_window->Show();
- Show();
- b_shown = true;
-
- p_intf->p_sys->p_video_sizer = new wxBoxSizer( wxHORIZONTAL );
-#if (wxCHECK_VERSION(2,5,3))
- p_intf->p_sys->p_video_sizer->Add( this, 1, wxEXPAND|wxFIXED_MINSIZE );
-#else
- p_intf->p_sys->p_video_sizer->Add( this, 1, wxEXPAND );
-#endif
-
- ReleaseWindow( NULL );
-}
-
-VideoWindow::~VideoWindow()
-{
- vlc_mutex_lock( &lock );
- if( p_vout )
- {
- if( vout_Control( p_vout, VOUT_CLOSE ) != VLC_SUCCESS )
- vout_Control( p_vout, VOUT_REPARENT, 0 );
- }
-
- p_intf->pf_request_window = NULL;
- p_intf->pf_release_window = NULL;
- p_intf->pf_control_window = NULL;
- vlc_mutex_unlock( &lock );
-
- if( !b_auto_size )
- {
- WindowSettings *ws = p_intf->p_sys->p_window_settings;
- ws->SetSettings( WindowSettings::ID_VIDEO, true,
- GetPosition(), GetSize() );
- }
-
- vlc_mutex_destroy( &lock );
-}
-
-/*****************************************************************************
- * Private methods.
- *****************************************************************************/
-static void *GetWindow( intf_thread_t *p_intf, vout_thread_t *p_vout,
- int *pi_x_hint, int *pi_y_hint,
- unsigned int *pi_width_hint,
- unsigned int *pi_height_hint )
-{
- return p_intf->p_sys->p_video_window->GetWindow( p_vout,
- pi_x_hint, pi_y_hint,
- pi_width_hint,
- pi_height_hint );
-}
-
-/* Part of the hack to get the X11 window handle from the GtkWidget */
-#ifdef __WXGTK__
-extern "C" {
-#ifdef __WXGTK20__
- int gdk_x11_drawable_get_xid( void * );
-#endif
- void *gtk_widget_get_parent_window( void * );
-}
-#endif
-
-void *VideoWindow::GetWindow( vout_thread_t *_p_vout,
- int *pi_x_hint, int *pi_y_hint,
- unsigned int *pi_width_hint,
- unsigned int *pi_height_hint )
-{
-#if defined(__WXGTK__) || defined(WIN32)
- vlc_mutex_lock( &lock );
-
- if( p_vout )
- {
- vlc_mutex_unlock( &lock );
- msg_Dbg( p_intf, "video window already in use" );
- return NULL;
- }
-
- p_vout = _p_vout;
-
- wxSizeEvent event( wxSize(*pi_width_hint, *pi_height_hint),
- UpdateSize_Event );
- AddPendingEvent( event );
- vlc_mutex_unlock( &lock );
-
-#ifdef __WXGTK__
- GtkWidget *p_widget = p_child_window->GetHandle();
-
-#ifdef __WXGTK20__
- return (void *)gdk_x11_drawable_get_xid(
- gtk_widget_get_parent_window( p_widget ) );
-#elif defined(__WXGTK__)
- return (void *)*(int *)( (char *)gtk_widget_get_parent_window( p_widget )
- + 2 * sizeof(void *) );
-#endif
-
-#elif defined(WIN32)
- return (void*)GetHandle();
-
-#endif
-
-#else // defined(__WXGTK__) || defined(WIN32)
- return NULL;
-
-#endif
-}
-
-static void ReleaseWindow( intf_thread_t *p_intf, void *p_window )
-{
- return p_intf->p_sys->p_video_window->ReleaseWindow( p_window );
-}
-
-void VideoWindow::ReleaseWindow( void *p_window )
-{
- vlc_mutex_lock( &lock );
- p_vout = NULL;
- vlc_mutex_unlock( &lock );
-
- if( !b_auto_size ) return;
-
-#if defined(__WXGTK__) || defined(WIN32)
- wxSizeEvent event( wxSize(0, 0), UpdateHide_Event );
- AddPendingEvent( event );
-#endif
-}
-
-void VideoWindow::UpdateSize( wxEvent &_event )
-{
- m_hide_timer.Stop();
-
- if( !b_auto_size ) return;
-
- wxSizeEvent * event = (wxSizeEvent*)(&_event);
- if( !b_shown )
- {
- p_intf->p_sys->p_video_sizer->Show( this, TRUE );
- p_intf->p_sys->p_video_sizer->Layout();
- SetFocus();
- b_shown = true;
- }
-
- p_intf->p_sys->p_video_sizer->SetMinSize( event->GetSize() );
-
- i_creation_date = mdate();
- wxCommandEvent intf_event( wxEVT_INTF, 0 );
- p_parent->AddPendingEvent( intf_event );
-}
-
-void VideoWindow::UpdateHide( wxEvent &_event )
-{
- if( b_auto_size ) m_hide_timer.Start( 200, wxTIMER_ONE_SHOT );
-}
-
-void VideoWindow::OnHideTimer( wxTimerEvent& WXUNUSED(event))
-{
- if( b_shown )
- {
- p_intf->p_sys->p_video_sizer->Show( this, FALSE );
- SetSize( 0, 0 );
- p_intf->p_sys->p_video_sizer->Layout();
- b_shown = false;
- }
- p_intf->p_sys->p_video_sizer->SetMinSize( wxSize(0,0) );
-
- wxCommandEvent intf_event( wxEVT_INTF, 0 );
- p_parent->AddPendingEvent( intf_event );
-}
-
-void VideoWindow::OnControlEvent( wxCommandEvent &event )
-{
- switch( event.GetId() )
- {
- case SetStayOnTop_Event:
- wxCommandEvent intf_event( wxEVT_INTF, 1 );
- intf_event.SetInt( event.GetInt() );
- p_parent->AddPendingEvent( intf_event );
- break;
- }
-}
-
-static int ControlWindow( intf_thread_t *p_intf, void *p_window,
- int i_query, va_list args )
-{
- return p_intf->p_sys->p_video_window->ControlWindow( p_window, i_query,
- args );
-}
-
-int VideoWindow::ControlWindow( void *p_window, int i_query, va_list args )
-{
- int i_ret = VLC_EGENERIC;
-
- vlc_mutex_lock( &lock );
-
- switch( i_query )
- {
- case VOUT_GET_SIZE:
- {
- unsigned int *pi_width = va_arg( args, unsigned int * );
- unsigned int *pi_height = va_arg( args, unsigned int * );
-
- *pi_width = GetSize().GetWidth();
- *pi_height = GetSize().GetHeight();
- i_ret = VLC_SUCCESS;
- }
- break;
-
- case VOUT_SET_SIZE:
- {
- if( !b_auto_size ) break;
-
- unsigned int i_width = va_arg( args, unsigned int );
- unsigned int i_height = va_arg( args, unsigned int );
-
- if( !i_width && p_vout ) i_width = p_vout->i_window_width;
- if( !i_height && p_vout ) i_height = p_vout->i_window_height;
-
- /* Update dimensions */
- wxSizeEvent event( wxSize( i_width, i_height ), UpdateSize_Event );
-
- AddPendingEvent( event );
-
- i_ret = VLC_SUCCESS;
- }
- break;
-
- case VOUT_SET_STAY_ON_TOP:
- {
- int i_arg = va_arg( args, int );
- wxCommandEvent event( wxEVT_VLC_VIDEO, SetStayOnTop_Event );
- event.SetInt( i_arg );
- AddPendingEvent( event );
-
- i_ret = VLC_SUCCESS;
- }
- break;
-
- default:
- msg_Dbg( p_intf, "control query not supported" );
- break;
- }
-
- vlc_mutex_unlock( &lock );
-
- return i_ret;
-}
+++ /dev/null
-/*****************************************************************************
- * video.hpp: Embedded video management
- *****************************************************************************
- * Copyright (C) 1999-2005 the VideoLAN team
- * $Id$
- *
- * Authors: Gildas Bazin <gbazin@videolan.org>
- *
- * 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., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
- *****************************************************************************/
-
-#ifndef _WXVLC_VIDEO_H_
-#define _WXVLC_VIDEO_H_
-
-#include "wxwidgets.hpp"
-
-namespace wxvlc
-{
- class VideoWindow: public wxWindow
- {
- public:
- /* Constructor */
- VideoWindow( intf_thread_t *_p_intf, wxWindow *p_parent );
- virtual ~VideoWindow();
-
- void *GetWindow( vout_thread_t *p_vout, int *, int *,
- unsigned int *, unsigned int * );
- void ReleaseWindow( void * );
- int ControlWindow( void *, int, va_list );
-
- mtime_t i_creation_date;
-
- private:
- intf_thread_t *p_intf;
- vout_thread_t *p_vout;
- wxWindow *p_parent;
- vlc_mutex_t lock;
- bool b_shown;
- bool b_auto_size;
-
- wxWindow *p_child_window;
-
- wxTimer m_hide_timer;
-
- void UpdateSize( wxEvent& event );
- void UpdateHide( wxEvent& event );
- void OnControlEvent( wxCommandEvent& event );
- void OnHideTimer( wxTimerEvent& WXUNUSED(event));
-
- DECLARE_EVENT_TABLE();
- };
-};
-
-/* Delegates - Todo: fix this (remove 1st, make 2nd method) */
-wxWindow *CreateVideoWindow( intf_thread_t *p_intf, wxWindow *p_parent );
-void UpdateVideoWindow( intf_thread_t *p_intf, wxWindow *p_window );
-
-#endif
+++ /dev/null
-/*****************************************************************************
- * wxwidgets.cpp : wxWidgets plugin for vlc
- *****************************************************************************
- * Copyright (C) 2000-2005 the VideoLAN team
- * $Id$
- *
- * 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., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
- *****************************************************************************/
-
-/*****************************************************************************
- * Preamble
- *****************************************************************************/
-#include <errno.h> /* ENOMEM */
-
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include <vlc_common.h>
-#include <vlc_plugin.h>
-#include <vlc_interface.h>
-
-#ifdef HAVE_LOCALE_H
-# include <locale.h>
-#endif
-
-#include "interface.hpp"
-
-/* Temporary hack */
-#if defined(WIN32) && defined(_WX_INIT_H_)
-#if (wxMAJOR_VERSION <= 2) && (wxMINOR_VERSION <= 5) && (wxRELEASE_NUMBER < 3)
-/* Hack to detect wxWidgets 2.5 which has a different wxEntry() prototype */
-extern int wxEntry( HINSTANCE hInstance, HINSTANCE hPrevInstance = NULL,
- char *pCmdLine = NULL, int nCmdShow = SW_NORMAL );
-#endif
-#endif
-
-/*****************************************************************************
- * Local prototypes.
- *****************************************************************************/
-static int Open ( vlc_object_t * );
-static void Close ( vlc_object_t * );
-static int OpenDialogs ( vlc_object_t * );
-
-static void Run ( intf_thread_t * );
-static void* Init ( vlc_object_t * );
-
-static void ShowDialog ( intf_thread_t *, int, int, intf_dialog_args_t * );
-
-#if (wxCHECK_VERSION(2,5,0))
-void *wxClassInfo_sm_classTable_BUGGY = 0;
-#endif
-
-/*****************************************************************************
- * Local classes declarations.
- *****************************************************************************/
-class Instance: public wxApp
-{
-public:
- Instance();
- Instance( intf_thread_t *_p_intf );
-
- bool OnInit();
- int OnExit();
-
-private:
- intf_thread_t *p_intf;
- wxLocale locale; /* locale we'll be using */
-};
-
-/*****************************************************************************
- * Module descriptor
- *****************************************************************************/
-#define EMBED_TEXT N_("Embed video in interface")
-#define EMBED_LONGTEXT N_("Embed the video inside the interface instead " \
- "of having it in a separate window.")
-#define BOOKMARKS_TEXT N_("Bookmarks dialog")
-#define BOOKMARKS_LONGTEXT N_("Show bookmarks dialog at startup" )
-#define EXTENDED_TEXT N_("Extended GUI")
-#define EXTENDED_LONGTEXT N_("Show extended GUI (equalizer, image adjust, " \
- "video filters...) at startup" )
-#define TASKBAR_TEXT N_("Taskbar")
-#define TASKBAR_LONGTEXT N_("Show VLC on the taskbar")
-#define MINIMAL_TEXT N_("Minimal interface")
-#define MINIMAL_LONGTEXT N_("Use minimal interface, with no toolbar and " \
- "fewer menus.")
-#define SIZE_TO_VIDEO_TEXT N_("Size to video")
-#define SIZE_TO_VIDEO_LONGTEXT N_("Resize VLC to match the video resolution.")
-#define SYSTRAY_TEXT N_("Systray icon")
-#define SYSTRAY_LONGTEXT N_("Show a systray icon for VLC")
-#define LABEL_TEXT N_("Show labels in toolbar")
-#define LABEL_LONGTEXT N_("Show labels below the icons in the toolbar.")
-
-#define PLAYLIST_TEXT N_("Playlist view" )
-#define PLAYLIST_LONGTEXT N_("There are two possible playlist views in the " \
- "interface : the normal playlist (separate window), or an " \
- "embedded playlist (within the main interface, but with " \
- "less features). You can select which one will be available " \
- "on the toolbar (or both)." )
-
-static const int pi_playlist_views[] = { 0,1,2 };
-static const char *const psz_playlist_views[] = {
- N_("Normal" ), N_("Embedded" ), N_("Both") };
-
-vlc_module_begin ()
- set_shortname( "wxWidgets" )
- set_description( N_("wxWidgets interface") )
- set_category( CAT_INTERFACE )
- set_subcategory( SUBCAT_INTERFACE_MAIN )
- set_capability( "interface", 150 )
- set_callbacks( Open, Close )
- add_shortcut( "wxwindows" )
- add_shortcut( "wxwin" )
- add_shortcut( "wx" )
- add_shortcut( "wxwidgets" )
-
- add_bool( "wx-embed", 1, NULL,
- EMBED_TEXT, EMBED_LONGTEXT, false );
- add_deprecated_alias( "wxwin-enbed" ) /*Deprecated since 0.8.4*/
- add_bool( "wx-bookmarks", 0, NULL,
- BOOKMARKS_TEXT, BOOKMARKS_LONGTEXT, false );
- add_deprecated_alias( "wxwin-bookmarks" ) /*Deprecated since 0.8.4*/
- add_bool( "wx-taskbar", 1, NULL,
- TASKBAR_TEXT, TASKBAR_LONGTEXT, false );
- add_deprecated_alias( "wxwin-taskbar" ) /*Deprecated since 0.8.4*/
- add_bool( "wx-extended", 0, NULL,
- EXTENDED_TEXT, EXTENDED_LONGTEXT, false );
- add_bool( "wx-minimal", 0, NULL,
- MINIMAL_TEXT, MINIMAL_LONGTEXT, true );
- add_deprecated_alias( "wxwin-minimal" ) /*Deprecated since 0.8.4*/
- add_bool( "wx-autosize", 1, NULL,
- SIZE_TO_VIDEO_TEXT, SIZE_TO_VIDEO_LONGTEXT, true );
- add_deprecated_alias( "wxwin-autosize" ) /*Deprecated since 0.8.4*/
- add_integer( "wx-playlist-view", 0, NULL, PLAYLIST_TEXT, PLAYLIST_LONGTEXT,
- false );
- change_integer_list( pi_playlist_views, psz_playlist_views, NULL );
-/* wxCocoa pretends to support this, but at least 2.6.x doesn't */
-#ifndef __APPLE__
-#ifdef wxHAS_TASK_BAR_ICON
- add_bool( "wx-systray", 0, NULL,
- SYSTRAY_TEXT, SYSTRAY_LONGTEXT, false );
- add_deprecated_alias( "wxwin-systray" ) /*Deprecated since 0.8.4*/
-#endif
-#endif
- add_bool( "wx-labels", 0, NULL, LABEL_TEXT, LABEL_LONGTEXT, true)
- add_string( "wx-config-last", NULL, NULL,
- N_("last config"), N_("last config"), true );
- change_autosave ()
- change_internal ()
- add_deprecated_alias( "wxwin-config-last" ) /*Deprecated since 0.8.4*/
-
- add_submodule ()
- set_description( N_("wxWidgets dialogs provider") )
- set_capability( "dialogs provider", 50 )
- set_callbacks( OpenDialogs, Close )
-
-#if !defined(WIN32)
- linked_with_a_crap_library_which_uses_atexit ()
-#endif
-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;
- /* Test in we have an X*/
-#if defined HAVE_GETENV && (defined __WXGTK__ || defined __WXX11)
- if( !getenv( "DISPLAY" ) )
- {
- msg_Err( p_intf, "no X server");
- return VLC_EGENERIC;
- }
-#endif
- /* Allocate instance and initialize some members */
- p_intf->p_sys = (intf_sys_t *)malloc( sizeof( intf_sys_t ) );
- if( p_intf->p_sys == NULL )
- return VLC_ENOMEM;
- memset( p_intf->p_sys, 0, sizeof( intf_sys_t ) );
-
- p_intf->pf_run = Run;
-
- p_intf->p_sys->p_sub = msg_Subscribe( p_intf );
-
- /* Initialize wxWidgets thread */
- p_intf->p_sys->b_playing = 0;
-
- p_intf->p_sys->p_input = NULL;
- p_intf->p_sys->i_playing = -1;
-
- p_intf->p_sys->p_popup_menu = NULL;
- p_intf->p_sys->p_video_window = NULL;
-
- p_intf->pf_show_dialog = NULL;
-
- p_intf->p_sys->b_video_autosize =
- config_GetInt( p_intf, "wx-autosize" );
-
- return VLC_SUCCESS;
-}
-
-static int OpenDialogs( vlc_object_t *p_this )
-{
- intf_thread_t *p_intf = (intf_thread_t *)p_this;
- int i_ret = Open( p_this );
-
- p_intf->pf_show_dialog = ShowDialog;
-
- return i_ret;
-}
-
-/*****************************************************************************
- * Close: destroy interface window
- *****************************************************************************/
-static void Close( vlc_object_t *p_this )
-{
- intf_thread_t *p_intf = (intf_thread_t *)p_this;
-
- vlc_object_lock( p_intf );
- p_intf->b_dead = true;
- vlc_object_unlock( p_intf );
-
- if( p_intf->pf_show_dialog )
- {
- /* We must destroy the dialogs thread */
- wxCommandEvent event( wxEVT_DIALOG, INTF_DIALOG_EXIT );
- p_intf->p_sys->p_wxwindow->AddPendingEvent( event );
- vlc_thread_join( p_intf );
- }
-
- msg_Unsubscribe( p_intf, p_intf->p_sys->p_sub );
-
- /* */
- delete p_intf->p_sys->p_window_settings;
-
-#if (wxCHECK_VERSION(2,5,0))
- wxClassInfo::sm_classTable = (wxHashTable*)wxClassInfo_sm_classTable_BUGGY;
-#endif
-
- /* Destroy structure */
- free( p_intf->p_sys );
-}
-
-/*****************************************************************************
- * Run: wxWidgets thread
- *****************************************************************************/
-
-//when is this called?
-#if !defined(__BUILTIN__) && defined( WIN32 )
-HINSTANCE hInstance = 0;
-extern "C" BOOL WINAPI
-DllMain (HANDLE hModule, DWORD fdwReason, LPVOID lpReserved)
-{
- hInstance = (HINSTANCE)hModule;
- return TRUE;
-}
-#endif
-
-static void Run( intf_thread_t *p_intf )
-{
- if( p_intf->pf_show_dialog )
- {
- /* The module is used in dialog provider mode */
-
- /* Create a new thread for wxWidgets */
- if( vlc_thread_create( p_intf, "Skins Dialogs Thread", Init, 0 ) )
- {
- msg_Err( p_intf, "cannot create Skins Dialogs Thread" );
- p_intf->pf_show_dialog = NULL;
- }
- }
- else
- {
- int canc = vlc_savecancel();
- /* The module is used in interface mode */
- Init( p_intf );
- vlc_restorecancel( canc );
- }
-}
-
-static void* Init( vlc_object_t * p_this )
-{
- intf_thread_t *p_intf = (intf_thread_t*)p_this;
-#if !defined( WIN32 )
- static char *p_args[] = { "" };
- int i_args = 1;
-#endif
- int canc = vlc_savecancel ();
-
- /* Hack to pass the p_intf pointer to the new wxWidgets Instance object */
-#ifdef wxTheApp
- wxApp::SetInstance( new Instance( p_intf ) );
-#else
- wxTheApp = new Instance( p_intf );
-#endif
-
-#if defined( WIN32 )
-#if !defined(__BUILTIN__)
-
- //because no one knows when DllMain is called
- if (hInstance == NULL)
- hInstance = GetModuleHandle(NULL);
-
- wxEntry( hInstance/*GetModuleHandle(NULL)*/, NULL, NULL, SW_SHOW );
-#else
- wxEntry( GetModuleHandle(NULL), NULL, NULL, SW_SHOW );
-#endif
-#else
- wxEntry( i_args, p_args );
-#endif
- vlc_restorecancel (canc);
- return NULL;
-}
-
-/* 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()
-{
- /* Initialization of i18n stuff.
- * Usefull for things we don't have any control over, like wxWidgets
- * provided facilities (eg. open file dialog) */
- locale.Init( wxLANGUAGE_DEFAULT, wxLOCALE_LOAD_DEFAULT );
-
- /* Load saved window settings */
- p_intf->p_sys->p_window_settings = new WindowSettings( p_intf );
-
- /* 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 parent
- * since it is the first window */
-
- if( !p_intf->pf_show_dialog )
- {
- /* The module is used in interface mode */
- long style = wxDEFAULT_FRAME_STYLE;
- if ( ! config_GetInt( p_intf, "wx-taskbar" ) )
- {
- style = wxDEFAULT_FRAME_STYLE|wxFRAME_NO_TASKBAR;
- }
-
- Interface *MainInterface = new Interface( p_intf, style );
- p_intf->p_sys->p_wxwindow = MainInterface;
-
- /* Show the interface */
- MainInterface->Show( TRUE );
- SetTopWindow( MainInterface );
- MainInterface->Raise();
- }
-
- /* Creates the dialogs provider */
- p_intf->p_sys->p_wxwindow =
- CreateDialogsProvider( p_intf, p_intf->pf_show_dialog ?
- NULL : p_intf->p_sys->p_wxwindow );
-
- p_intf->p_sys->pf_show_dialog = ShowDialog;
-
- /* OK, initialization is over */
- vlc_thread_ready( p_intf );
-
- /* Return TRUE to tell program to continue (FALSE would terminate) */
- return TRUE;
-}
-
-/*****************************************************************************
- * Instance::OnExit: called when the interface execution stops
- *****************************************************************************/
-int Instance::OnExit()
-{
- if( p_intf->pf_show_dialog )
- {
- /* We need to manually clean up the dialogs class */
- delete p_intf->p_sys->p_wxwindow;
- }
-
-#if (wxCHECK_VERSION(2,5,0))
- wxClassInfo_sm_classTable_BUGGY = wxClassInfo::sm_classTable;
- wxClassInfo::sm_classTable = 0;
-#endif
-
- return 0;
-}
-
-static void ShowDialog( intf_thread_t *p_intf, int i_dialog_event, int i_arg,
- intf_dialog_args_t *p_arg )
-{
- wxCommandEvent event( wxEVT_DIALOG, i_dialog_event );
- event.SetInt( i_arg );
- event.SetClientData( p_arg );
-
-#ifdef WIN32
- SendMessage( (HWND)p_intf->p_sys->p_wxwindow->GetHandle(),
- WM_CANCELMODE, 0, 0 );
-#endif
- if( i_dialog_event == INTF_DIALOG_POPUPMENU && i_arg == 0 ) return;
-
- /* Hack to prevent popup events to be enqueued when
- * one is already active */
- if( i_dialog_event != INTF_DIALOG_POPUPMENU ||
- !p_intf->p_sys->p_popup_menu )
- {
- p_intf->p_sys->p_wxwindow->AddPendingEvent( event );
- }
-}
-
-/*****************************************************************************
- * WindowSettings utility class
- *****************************************************************************/
-WindowSettings::WindowSettings( intf_thread_t *_p_intf )
-{
- char *psz_org = NULL;
- char *psz;
- int i;
-
- /* */
- p_intf = _p_intf;
-
- /* */
- for( i = 0; i < ID_MAX; i++ )
- {
- b_valid[i] = false;
- b_shown[i] = false;
- position[i] = wxDefaultPosition;
- size[i] = wxDefaultSize;
- }
- b_shown[ID_MAIN] = true;
-
- if( p_intf->pf_show_dialog ) return;
-
- /* Parse the configuration */
- psz_org = psz = config_GetPsz( p_intf, "wx-config-last" );
- if( !psz || *psz == '\0' ) return;
-
- msg_Dbg( p_intf, "Using last windows config '%s'", psz );
-
- i_screen_w = 0;
- i_screen_h = 0;
- while( psz && *psz )
- {
- int id, v[4];
-
- psz = strchr( psz, '(' );
-
- if( !psz )
- break;
- psz++;
-
- id = strtol( psz, &psz, 0 );
- if( *psz != ',' ) /* broken cfg */
- {
- goto invalid;
- }
- psz++;
-
- for( i = 0; i < 4; i++ )
- {
- v[i] = strtol( psz, &psz, 0 );
-
- if( i < 3 )
- {
- if( *psz != ',' )
- {
- goto invalid;
- }
- psz++;
- }
- else
- {
- if( *psz != ')' )
- {
- goto invalid;
- }
- }
- }
- if( id == ID_SCREEN )
- {
- i_screen_w = v[2];
- i_screen_h = v[3];
- }
- else if( id >= 0 && id < ID_MAX )
- {
- b_valid[id] = true;
- b_shown[id] = true;
- position[id] = wxPoint( v[0], v[1] );
- size[id] = wxSize( v[2], v[3] );
-
- msg_Dbg( p_intf, "id=%d p=(%d,%d) s=(%d,%d)",
- id, position[id].x, position[id].y,
- size[id].x, size[id].y );
- }
-
- psz = strchr( psz, ')' );
- if( psz ) psz++;
- }
-
- if( i_screen_w <= 0 || i_screen_h <= 0 )
- {
- goto invalid;
- }
-
- for( i = 0; i < ID_MAX; i++ )
- {
- if( !b_valid[i] )
- continue;
- if( position[i].x < 0 || position[i].y < 0 )
- {
- goto invalid;
- }
- if( i != ID_SMALL_PLAYLIST && (size[i].x <= 0 || size[i].y <= 0) )
- {
- goto invalid;
- }
- }
-
- free( psz_org );
- return;
-
-invalid:
- msg_Dbg( p_intf, "last windows config is invalid (ignored)" );
- for( i = 0; i < ID_MAX; i++ )
- {
- b_valid[i] = false;
- b_shown[i] = false;
- position[i] = wxDefaultPosition;
- size[i] = wxDefaultSize;
- }
- free( psz_org );
-}
-
-
-WindowSettings::~WindowSettings( )
-{
- wxString sCfg;
-
- if( p_intf->pf_show_dialog ) return;
-
- sCfg = wxString::Format( wxT("(%d,0,0,%d,%d)"), ID_SCREEN,
- wxSystemSettings::GetMetric( wxSYS_SCREEN_X ),
- wxSystemSettings::GetMetric( wxSYS_SCREEN_Y ) );
- for( int i = 0; i < ID_MAX; i++ )
- {
- if( !b_valid[i] || !b_shown[i] )
- continue;
-
- sCfg += wxString::Format( wxT("(%d,%d,%d,%d,%d)"),
- i, position[i].x, position[i].y,
- size[i].x, size[i].y );
- }
-
- config_PutPsz( p_intf, "wx-config-last", sCfg.mb_str(wxConvUTF8) );
-}
-
-void WindowSettings::SetScreen( int i_screen_w, int i_screen_h )
-{
- int i;
-
- for( i = 0; i < ID_MAX; i++ )
- {
- if( !b_valid[i] )
- continue;
- if( position[i].x >= i_screen_w || position[i].y >= i_screen_h )
- goto invalid;
- }
- return;
-
-invalid:
- for( i = 0; i < ID_MAX; i++ )
- {
- b_valid[i] = false;
- b_shown[i] = false;
- position[i] = wxDefaultPosition;
- size[i] = wxDefaultSize;
- }
-}
-
-void WindowSettings::SetSettings( int id, bool _b_shown, wxPoint p, wxSize s )
-{
- if( id < 0 || id >= ID_MAX )
- return;
-
- b_valid[id] = true;
- b_shown[id] = _b_shown;
-
- position[id] = p;
- size[id] = s;
-}
-
-bool WindowSettings::GetSettings( int id, bool& _b_shown, wxPoint& p, wxSize& s)
-{
- if( id < 0 || id >= ID_MAX )
- return false;
-
- if( !b_valid[id] )
- return false;
-
- _b_shown = b_shown[id];
- p = position[id];
- s = size[id];
-
- return true;
-}
+++ /dev/null
-/*****************************************************************************
- * wxwidgets.hpp: Common headers for the wxwidgets interface
- *****************************************************************************
- * Copyright (C) 1999-2005 the VideoLAN team
- * $Id$
- *
- * Authors: Gildas Bazin <gbazin@videolan.org>
- *
- * 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., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
- *****************************************************************************/
-
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#ifndef _WXVLC_WIDGETS_H_
-#define _WXVLC_WIDGETS_H_
-
-#ifdef WIN32 /* mingw32 hack */
-#undef Yield
-#undef CreateDialog
-#endif
-
-#ifdef _MSC_VER
-// turn off 'identifier was truncated to '255' characters in the debug info'
-# pragma warning( disable:4786 )
-#endif
-
-/* Let vlc take care of the i18n stuff */
-#define WXINTL_NO_GETTEXT_MACRO
-
-#include <vlc_common.h>
-#include <vlc_interface.h>
-#include "vlc_charset.h"
-#include <vlc_playlist.h>
-#include <wx/wx.h>
-#define SLIDER_MAX_POS 10000
-
-/*
-#include <wx/listctrl.h>
-#include <wx/textctrl.h>
-#include <wx/notebook.h>
-#include <wx/spinctrl.h>
-#include <wx/dnd.h>
-#include <wx/treectrl.h>
-#include <wx/gauge.h>
-#include <wx/accel.h>
-#include <wx/checkbox.h>
-#include <wx/wizard.h>
-#include <wx/taskbar.h>
-#include "vlc_keys.h"
-*/
-#if (!wxCHECK_VERSION(2,5,0))
-typedef long wxTreeItemIdValue;
-#endif
-
-DECLARE_LOCAL_EVENT_TYPE( wxEVT_DIALOG, 0 );
-DECLARE_LOCAL_EVENT_TYPE( wxEVT_INTF, 1 );
-
-/***************************************************************************
- * I18N macros
- ***************************************************************************/
-
-/*
- * wxU() is used to convert UTF-8 strings (typically from gettext)
- * to unicode strings (wchar_t).
- */
-#if wxUSE_UNICODE
-# define wxU(utf8) wxString(utf8, wxConvUTF8)
-#else
-# define wxU(utf8) wxString(wxConvUTF8.cMB2WC(utf8), *wxConvCurrent)
-#endif
-
-/*
- * wxL2U() use to convert localized “data” strings (while wxU() would convert
- * strings from gettext messages). Nowadays, the core use UTF-8 internally
- * and wxL2U() is only an obsoleted name for wxU().
- */
-#define wxL2U(utf8) wxU(utf8)
-
-/*
- * wxFromLocale() is a replacement for LibVLC FromLocale() that accepts
- * a wxString.
- *
- * Note that if you want to use non-ANSI code page characters on Windows,
- * you MUST build WxWidgets in “Unicode” mode. wxConvUTF8
- */
-static inline char *wxFromLocale (const wxString& string)
-{
-#if defined( wxUSE_UNICODE )
-# if defined( WIN32 )
- return FromWide ((const wchar_t *)string.c_str());
-# define wxLocaleFree free
-# else
- return FromLocaleDup (string.mb_str());
-# define wxLocaleFree free
-# endif
-#else
-# warning Please use WxWidgets with Unicode.
- return FromLocale (string.c_str());
-# define wxLocaleFree LocaleFree
-#endif
-}
-
-/* From Locale functions to use for File Drop targets ... go figure */
-#if defined( wxUSE_UNICODE ) && !defined( WIN32 )
-static inline char *wxDnDFromLocale( const wxChar *stupid )
-{
- /*
- * In Unicode mode, wxWidgets will encode file names in the locale
- * encoding with each **bytes** (rather than characters) represented
- * by a 32 bits unsigned integer. If you are lucky enough to be using
- * ISO-8859-1 as your local character encoding, that lame encoding
- * scheme happens to be identical to UTF-32 with your arch native
- * byte-endianess. If you are using anything else, including not only
- * UTF-8 but also Windows-1252(!) and ISO-8859-15(!) or any
- * non-western encoding, it obviously fails.
- */
- size_t n = 0;
- while (stupid[n])
- n++;
-
- char psz_local[n + 1];
- for (size_t i = 0; i <= n; i++)
- psz_local[i] = stupid[i];
-
- // Kludge for (broken?) apps that adds a LF at the end of DnD
- if ((n >= 1) && (strchr ("\n\r", stupid[n - 1]) != NULL))
- psz_local[n - 1] = '\0';
-
- return FromLocaleDup( psz_local );
-}
-# define wxDnDLocaleFree free
-#else
-# define wxDnDFromLocale wxFromLocale
-# define wxDnDLocaleFree wxLocaleFree
-#endif
-
-#define WRAPCOUNT 80
-
-#define OPEN_NORMAL 0
-#define OPEN_STREAM 1
-
-enum
-{
- ID_CONTROLS_TIMER,
- ID_SLIDER_TIMER,
-};
-
-namespace wxvlc {
- class WindowSettings;
- class VideoWindow;
-};
-
-using namespace wxvlc;
-
-/*****************************************************************************
- * intf_sys_t: description and status of wxwindows interface
- *****************************************************************************/
-struct intf_sys_t
-{
- /* the wx parent window */
- wxWindow *p_wxwindow;
- wxIcon *p_icon;
-
- /* window settings */
- WindowSettings *p_window_settings;
-
- /* special actions */
- bool b_playing;
- bool b_intf_show; /* interface to be shown */
-
- /* The input thread */
- input_thread_t * p_input;
-
- /* The messages window */
- msg_subscription_t* p_sub; /* message bank subscription */
-
- /* Playlist management */
- int i_playing; /* playlist selected item */
- unsigned i_playlist_usage;
-
- /* Send an event to show a dialog */
- void (*pf_show_dialog) ( intf_thread_t *p_intf, int i_dialog, int i_arg,
- intf_dialog_args_t *p_arg );
-
- /* Popup menu */
- wxMenu *p_popup_menu;
-
- /* Hotkeys */
- int i_first_hotkey_event;
- int i_hotkeys;
-
- /* Embedded vout */
- VideoWindow *p_video_window;
- wxBoxSizer *p_video_sizer;
- bool b_video_autosize;
-
- /* Aout */
- aout_instance_t *p_aout;
-};
-
-
-
-wxArrayString SeparateEntries( wxString );
-wxWindow *CreateDialogsProvider( intf_thread_t *p_intf, wxWindow *p_parent );
-
-/*
- * wxWindows keeps dead locking because the timer tries to lock the playlist
- * when it's already locked somewhere else in the very wxWindows interface
- * module. Unless someone implements a "vlc_mutex_trylock", we need that.
- */
-inline void LockPlaylist( intf_sys_t *p_sys, playlist_t *p_pl )
-{
- if( p_sys->i_playlist_usage++ == 0)
- playlist_lock( p_pl );
-}
-
-inline void UnlockPlaylist( intf_sys_t *p_sys, playlist_t *p_pl )
-{
- if( --p_sys->i_playlist_usage == 0)
- playlist_Unlock( p_pl );
-}
-
-#endif