From: <moi...@us...> - 2007-01-29 21:35:59
|
Revision: 47 http://mp-plugins.svn.sourceforge.net/mp-plugins/?rev=47&view=rev Author: moiristo Date: 2007-01-29 13:35:54 -0800 (Mon, 29 Jan 2007) Log Message: ----------- Add IPTV@UT plugin and VideoLAN plugin Added Paths: ----------- trunk/plugins/IPTV@UT/ trunk/plugins/IPTV@UT/IPTV@UT/ trunk/plugins/IPTV@UT/IPTV@UT/ConfigurationForm.Designer.cs trunk/plugins/IPTV@UT/IPTV@UT/ConfigurationForm.cs trunk/plugins/IPTV@UT/IPTV@UT/ConfigurationForm.resx trunk/plugins/IPTV@UT/IPTV@UT/IPTV.cs trunk/plugins/IPTV@UT/IPTV@UT/IPTV@UT.csproj trunk/plugins/IPTV@UT/IPTV@UT/IPTVPlugin.cs trunk/plugins/IPTV@UT/IPTV@UT/PlayListVLCIO.cs trunk/plugins/IPTV@UT/IPTV@UT/PlayListVLCItem.cs trunk/plugins/IPTV@UT/IPTV@UT/Properties/ trunk/plugins/IPTV@UT/IPTV@UT/Properties/AssemblyInfo.cs trunk/plugins/IPTV@UT/IPTV@UT/ShowWaitCursor.cs trunk/plugins/IPTV@UT/IP...@UT...n trunk/plugins/IPTV@UT/IP...@UT...o trunk/plugins/IPTV@UT/[ Default Skin ]/ trunk/plugins/IPTV@UT/[ Default Skin ]/MP_0.2.1/ trunk/plugins/IPTV@UT/[ Default Skin ]/MP_0.2.1/MyIPTV.xml trunk/plugins/IPTV@UT/[ Default Skin ]/MP_0.2.1_SVN/ trunk/plugins/IPTV@UT/[ Default Skin ]/MP_0.2.1_SVN/MyIPTV.xml trunk/plugins/IPTV@UT/[ Project Mayhem 3 ]/ trunk/plugins/IPTV@UT/[ Project Mayhem 3 ]/MyIPTV.xml trunk/plugins/VideoLAN/ trunk/plugins/VideoLAN/ConfigurationForm.cs trunk/plugins/VideoLAN/ConfigurationForm.resx trunk/plugins/VideoLAN/IPlayer.cs trunk/plugins/VideoLAN/InnerVlcWindow.cs trunk/plugins/VideoLAN/InnerVlcWindow.designer.cs trunk/plugins/VideoLAN/InnerVlcWindow.resx trunk/plugins/VideoLAN/NativeLibVlc.cs trunk/plugins/VideoLAN/VideoLanControl.cs trunk/plugins/VideoLAN/VideoLanControl.designer.cs trunk/plugins/VideoLAN/VideoLanControl.resx trunk/plugins/VideoLAN/VideoLanPlugin.cs trunk/plugins/VideoLAN/VideoLanPlugin.cs.bak trunk/plugins/VideoLAN/VlcControl/ trunk/plugins/VideoLAN/VlcControl/IPlayer.cs trunk/plugins/VideoLAN/VlcControl/InnerVlcWindow.Designer.cs trunk/plugins/VideoLAN/VlcControl/InnerVlcWindow.cs trunk/plugins/VideoLAN/VlcControl/NativeLibVlc.cs trunk/plugins/VideoLAN/VlcControl/VLanControl.csproj trunk/plugins/VideoLAN/VlcControl/VlcUserControl.Designer.cs trunk/plugins/VideoLAN/VlcControl/VlcUserControl.cs trunk/plugins/VideoLAN/VlcControl/VlcUserControl.resx trunk/plugins/VideoLAN/VlcUserControl.cs trunk/plugins/VideoLAN/VlcUserControl.designer.cs trunk/plugins/VideoLAN/VlcUserControl.resx Added: trunk/plugins/IPTV@UT/IPTV@UT/ConfigurationForm.Designer.cs =================================================================== --- trunk/plugins/IPTV@UT/IPTV@UT/ConfigurationForm.Designer.cs (rev 0) +++ trunk/plugins/IPTV@UT/IPTV@UT/ConfigurationForm.Designer.cs 2007-01-29 21:35:54 UTC (rev 47) @@ -0,0 +1,152 @@ +namespace MediaPortal.GUI.IPTV +{ + partial class ConfigurationForm + { + /// <summary> + /// Required designer variable. + /// </summary> + private System.ComponentModel.IContainer components = null; + + /// <summary> + /// Clean up any resources being used. + /// </summary> + /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param> + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// <summary> + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// </summary> + private void InitializeComponent() + { + this.textBox1 = new System.Windows.Forms.TextBox(); + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.button1 = new System.Windows.Forms.Button(); + this.groupBox2 = new System.Windows.Forms.GroupBox(); + this.button2 = new System.Windows.Forms.Button(); + this.textBox2 = new System.Windows.Forms.TextBox(); + this.button3 = new System.Windows.Forms.Button(); + this.button4 = new System.Windows.Forms.Button(); + this.groupBox1.SuspendLayout(); + this.groupBox2.SuspendLayout(); + this.SuspendLayout(); + // + // textBox1 + // + this.textBox1.Location = new System.Drawing.Point(6, 19); + this.textBox1.Name = "textBox1"; + this.textBox1.Size = new System.Drawing.Size(238, 20); + this.textBox1.TabIndex = 0; + // + // groupBox1 + // + this.groupBox1.Controls.Add(this.button1); + this.groupBox1.Controls.Add(this.textBox1); + this.groupBox1.Location = new System.Drawing.Point(12, 12); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.Size = new System.Drawing.Size(302, 47); + this.groupBox1.TabIndex = 1; + this.groupBox1.TabStop = false; + this.groupBox1.Text = "Playlists Folder"; + // + // button1 + // + this.button1.Location = new System.Drawing.Point(250, 19); + this.button1.Name = "button1"; + this.button1.Size = new System.Drawing.Size(25, 20); + this.button1.TabIndex = 1; + this.button1.Text = "..."; + this.button1.UseVisualStyleBackColor = true; + this.button1.Click += new System.EventHandler(this.button1_Click); + // + // groupBox2 + // + this.groupBox2.Controls.Add(this.button2); + this.groupBox2.Controls.Add(this.textBox2); + this.groupBox2.Location = new System.Drawing.Point(12, 65); + this.groupBox2.Name = "groupBox2"; + this.groupBox2.Size = new System.Drawing.Size(302, 47); + this.groupBox2.TabIndex = 2; + this.groupBox2.TabStop = false; + this.groupBox2.Text = "Default Playlist"; + // + // button2 + // + this.button2.Location = new System.Drawing.Point(250, 18); + this.button2.Name = "button2"; + this.button2.Size = new System.Drawing.Size(25, 20); + this.button2.TabIndex = 2; + this.button2.Text = "..."; + this.button2.UseVisualStyleBackColor = true; + this.button2.Click += new System.EventHandler(this.button2_Click); + // + // textBox2 + // + this.textBox2.Location = new System.Drawing.Point(6, 19); + this.textBox2.Name = "textBox2"; + this.textBox2.Size = new System.Drawing.Size(238, 20); + this.textBox2.TabIndex = 0; + // + // button3 + // + this.button3.Location = new System.Drawing.Point(18, 134); + this.button3.Name = "button3"; + this.button3.Size = new System.Drawing.Size(75, 23); + this.button3.TabIndex = 3; + this.button3.Text = "OK"; + this.button3.UseVisualStyleBackColor = true; + this.button3.Click += new System.EventHandler(this.button3_Click); + // + // button4 + // + this.button4.Location = new System.Drawing.Point(100, 133); + this.button4.Name = "button4"; + this.button4.Size = new System.Drawing.Size(75, 23); + this.button4.TabIndex = 4; + this.button4.Text = "Cancel"; + this.button4.UseVisualStyleBackColor = true; + this.button4.Click += new System.EventHandler(this.button4_Click); + // + // ConfigurationForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(364, 169); + this.Controls.Add(this.button4); + this.Controls.Add(this.button3); + this.Controls.Add(this.groupBox2); + this.Controls.Add(this.groupBox1); + this.Name = "ConfigurationForm"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "IPTV@UT Configuration"; + this.groupBox1.ResumeLayout(false); + this.groupBox1.PerformLayout(); + this.groupBox2.ResumeLayout(false); + this.groupBox2.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.TextBox textBox1; + private System.Windows.Forms.GroupBox groupBox1; + private System.Windows.Forms.Button button1; + private System.Windows.Forms.GroupBox groupBox2; + private System.Windows.Forms.Button button2; + private System.Windows.Forms.TextBox textBox2; + private System.Windows.Forms.OpenFileDialog openFileDialog1; + private System.Windows.Forms.FolderBrowserDialog folderBrowserDialog1; + private System.Windows.Forms.Button button3; + private System.Windows.Forms.Button button4; + } +} \ No newline at end of file Property changes on: trunk/plugins/IPTV@UT/IPTV@UT/ConfigurationForm.Designer.cs ___________________________________________________________________ Name: svn:eol-style + native Added: trunk/plugins/IPTV@UT/IPTV@UT/ConfigurationForm.cs =================================================================== --- trunk/plugins/IPTV@UT/IPTV@UT/ConfigurationForm.cs (rev 0) +++ trunk/plugins/IPTV@UT/IPTV@UT/ConfigurationForm.cs 2007-01-29 21:35:54 UTC (rev 47) @@ -0,0 +1,67 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.IO; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; +using MediaPortal.GUI.Library; +using MediaPortal.Util; + +namespace MediaPortal.GUI.IPTV +{ + public partial class ConfigurationForm : Form + { + public ConfigurationForm() + { + InitializeComponent(); + textBox1.Text = IPTV.GetPlayListDir(); + textBox2.Text = IPTV.GetDefaultPlayList(); + } + + // Path + private void button1_Click(object sender, EventArgs e) + { + folderBrowserDialog1 = new System.Windows.Forms.FolderBrowserDialog(); + folderBrowserDialog1.SelectedPath = textBox1.Text; + if (folderBrowserDialog1.ShowDialog() == DialogResult.OK) + { + //folderBrowserDialog1.SelectedPath + textBox1.Text = folderBrowserDialog1.SelectedPath; + } + } + + // File + private void button2_Click(object sender, EventArgs e) + { + openFileDialog1 = new System.Windows.Forms.OpenFileDialog(); + openFileDialog1.Filter = "VLC Playlists (*.vlc)|*.vlc|M3U Playlists (*.m3u)|*.m3u"; + openFileDialog1.FileName = textBox2.Text; + if (!textBox1.Text.Equals("")) openFileDialog1.InitialDirectory = textBox1.Text; + if (openFileDialog1.ShowDialog() == DialogResult.OK) + { + //openFileDialog1.FileName + textBox2.Text = openFileDialog1.FileName; + } + } + + private void button4_Click(object sender, EventArgs e) + { + //Cancel Button + this.Dispose(true); + } + + private void button3_Click(object sender, EventArgs e) + { + //OK Button + string dir = Directory.GetCurrentDirectory(); + using (MediaPortal.Profile.Settings writer = new MediaPortal.Profile.Settings(dir + @"\MyIPTV.xml")) + { + writer.SetValue("settings", "PlayListDir", textBox1.Text.Trim()); + writer.SetValue("settings", "DefaultPlayList", textBox2.Text.Trim()); + } + this.Dispose(true); + } + } +} \ No newline at end of file Property changes on: trunk/plugins/IPTV@UT/IPTV@UT/ConfigurationForm.cs ___________________________________________________________________ Name: svn:eol-style + native Added: trunk/plugins/IPTV@UT/IPTV@UT/ConfigurationForm.resx =================================================================== --- trunk/plugins/IPTV@UT/IPTV@UT/ConfigurationForm.resx (rev 0) +++ trunk/plugins/IPTV@UT/IPTV@UT/ConfigurationForm.resx 2007-01-29 21:35:54 UTC (rev 47) @@ -0,0 +1,120 @@ +<?xml version="1.0" encoding="utf-8"?> +<root> + <!-- + Microsoft ResX Schema + + Version 2.0 + + The primary goals of this format is to allow a simple XML format + that is mostly human readable. The generation and parsing of the + various data types are done through the TypeConverter classes + associated with the data types. + + Example: + + ... ado.net/XML headers & schema ... + <resheader name="resmimetype">text/microsoft-resx</resheader> + <resheader name="version">2.0</resheader> + <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> + <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> + <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> + <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> + <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> + <value>[base64 mime encoded serialized .NET Framework object]</value> + </data> + <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> + <comment>This is a comment</comment> + </data> + + There are any number of "resheader" rows that contain simple + name/value pairs. + + Each data row contains a name, and value. The row also contains a + type or mimetype. Type corresponds to a .NET class that support + text/value conversion through the TypeConverter architecture. + Classes that don't support this are serialized and stored with the + mimetype set. + + The mimetype is used for serialized objects, and tells the + ResXResourceReader how to depersist the object. This is currently not + extensible. For a given mimetype the value must be set accordingly: + + Note - application/x-microsoft.net.object.binary.base64 is the format + that the ResXResourceWriter will generate, however the reader can + read any of the formats listed below. + + mimetype: application/x-microsoft.net.object.binary.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.soap.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Soap.SoapFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.bytearray.base64 + value : The object must be serialized into a byte array + : using a System.ComponentModel.TypeConverter + : and then encoded with base64 encoding. + --> + <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> + <xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> + <xsd:element name="root" msdata:IsDataSet="true"> + <xsd:complexType> + <xsd:choice maxOccurs="unbounded"> + <xsd:element name="metadata"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" /> + </xsd:sequence> + <xsd:attribute name="name" use="required" type="xsd:string" /> + <xsd:attribute name="type" type="xsd:string" /> + <xsd:attribute name="mimetype" type="xsd:string" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="assembly"> + <xsd:complexType> + <xsd:attribute name="alias" type="xsd:string" /> + <xsd:attribute name="name" type="xsd:string" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="data"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> + <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> + <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="resheader"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" /> + </xsd:complexType> + </xsd:element> + </xsd:choice> + </xsd:complexType> + </xsd:element> + </xsd:schema> + <resheader name="resmimetype"> + <value>text/microsoft-resx</value> + </resheader> + <resheader name="version"> + <value>2.0</value> + </resheader> + <resheader name="reader"> + <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <resheader name="writer"> + <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> +</root> \ No newline at end of file Property changes on: trunk/plugins/IPTV@UT/IPTV@UT/ConfigurationForm.resx ___________________________________________________________________ Name: svn:eol-style + native Added: trunk/plugins/IPTV@UT/IPTV@UT/IPTV.cs =================================================================== --- trunk/plugins/IPTV@UT/IPTV@UT/IPTV.cs (rev 0) +++ trunk/plugins/IPTV@UT/IPTV@UT/IPTV.cs 2007-01-29 21:35:54 UTC (rev 47) @@ -0,0 +1,273 @@ +using MediaPortal.GUI.Library; +using MediaPortal.Player; +using MediaPortal.Util; +using MediaPortal.Dialogs; +using MediaPortal.Playlists; +using MediaPortal.VideoLanPlugin; +using System.Drawing; +using System.IO; + +namespace MediaPortal.GUI.IPTV +{ + public class IPTV : GUIWindow + { + #region SkinControlAttributes + [SkinControlAttribute(2)] + protected GUIButtonControl btnLoad = null; + [SkinControlAttribute(99)] + protected GUIVideoControl videoWindow = null; + #endregion + + private static PlayList playlist = new PlayList(); + private static int currentChannel = 0; + private static PlayListVLCIO plvi = new PlayListVLCIO(); + private static VirtualDirectory plDirectory = new VirtualDirectory(); + private static string playListPath; + private static OnActionHandler ah; + private static bool inited = false; + + public override int GetID + { + get + { + return 7500; + } + set + { + base.GetID = value; + } + } + + public override bool Init() + { + bool result = Load(GUIGraphicsContext.Skin + @"\MyIPTV.xml"); + + playListPath = GetPlayListDir(); + if (playListPath.Equals("")) playListPath = Directory.GetCurrentDirectory(); + + plDirectory.AddExtension(".vlc"); + plDirectory.AddExtension(".m3u"); + plDirectory.ShowFilesWithoutExtension = false; + + Share share = new Share(); + share.Name = "Playlists"; + share.Path = playListPath; + plDirectory.IsRootShare(playListPath); + + if(ah == null) ah = new OnActionHandler(OnAction2); + + return result; + } + + public void OnAction2(Action action) + { + if (GUIWindowManager.ActiveWindowEx == (int) GUIWindow.Window.WINDOW_DIALOG_MENU) return; + + switch (action.wID) + { + case Action.ActionType.ACTION_PREV_CHANNEL: + IPTV.OnPreviousChannel(); + break; + case Action.ActionType.ACTION_PAGE_DOWN: + IPTV.OnPreviousChannel(); + break; + + case Action.ActionType.ACTION_NEXT_CHANNEL: + IPTV.OnNextChannel(); + break; + case Action.ActionType.ACTION_PAGE_UP: + IPTV.OnNextChannel(); + break; + case Action.ActionType.ACTION_PLAY: + Play(currentChannel); + break; + case Action.ActionType.ACTION_KEY_PRESSED: + switch (action.m_key.KeyChar) + { + case '1': + if (playlist.Count > 0) currentChannel = 0; + Play(currentChannel); + break; + case '2': + if (playlist.Count > 1) currentChannel = 1; + Play(currentChannel); + break; + case '3': + if (playlist.Count > 2) currentChannel = 2; + Play(currentChannel); + break; + case '4': + if (playlist.Count > 3) currentChannel = 3; + Play(currentChannel); + break; + case '5': + if (playlist.Count > 4) currentChannel = 4; + Play(currentChannel); + break; + case '6': + if (playlist.Count > 5) currentChannel = 5; + Play(currentChannel); + break; + case '7': + if (playlist.Count > 6) currentChannel = 6; + Play(currentChannel); + break; + case '8': + if (playlist.Count > 7) currentChannel = 7; + Play(currentChannel); + break; + case '9': + if (playlist.Count > 8) currentChannel = 8; + Play(currentChannel); + break; + } + break; + } + } + + public override void OnAction(Action action) + { + base.OnAction(action); + } + + private static void OnNextChannel() + { + if (currentChannel + 1 < playlist.Count) Play(++currentChannel); + } + + private static void OnPreviousChannel() + { + if (currentChannel > 0 && currentChannel - 1 < playlist.Count) Play(--currentChannel); + } + + protected override void OnClicked(int controlId, GUIControl control, Action.ActionType actionType) + { + if (control == btnLoad) + { + if (g_Player.Playing) g_Player.Stop(); + GUIDialogSelect diag = (GUIDialogSelect)GUIWindowManager.GetWindow((int)GUIWindow.Window.WINDOW_DIALOG_SELECT); + diag.SetHeading("Choose Playlist"); + diag.Reset(); + foreach (GUIListItem item in plDirectory.GetDirectory(playListPath)) + { + if(!item.IsFolder) diag.Add(item.Label); + } + diag.EnableButton(true); + diag.SetButtonLabel("Load Playlist"); + diag.DoModal(GUIWindowManager.ActiveWindow); + + // and wait till user selects one, then load it immediately + string selected = diag.SelectedLabelText; + + if(File.Exists(playListPath + @"\" + selected + ".vlc")) + LoadAndPlay(playListPath + @"\" + selected + ".vlc"); + else LoadAndPlay(playListPath + @"\" + selected + ".m3u"); + } + + base.OnClicked(controlId, control, actionType); + } + + public override bool OnMessage(GUIMessage message) + { + return base.OnMessage(message); + } + + + protected override void OnPageLoad() + { + base.OnPageLoad(); + + GUIGraphicsContext.OnNewAction -= ah; + GUIGraphicsContext.OnNewAction += ah; + + //set video window position + if (videoWindow != null) + { + GUIGraphicsContext.VideoWindow = new Rectangle(videoWindow.XPosition, videoWindow.YPosition, videoWindow.Width, videoWindow.Height); + } + + if (!inited) + { + GUIPropertyManager.SetProperty("#IPTV.View.channel", ""); + // Read a playlist, if configured, and start playing it + LoadAndPlay(GetDefaultPlayList()); + + inited = true; + } + + } + + protected override void OnPageDestroy(int new_windowId) + { + if (new_windowId != (int)GUIWindow.Window.WINDOW_FULLSCREEN_VIDEO) GUIGraphicsContext.OnNewAction -= ah; + base.OnPageDestroy(new_windowId); + } + + protected override void OnShowContextMenu() + { + if (playlist.Count == 0) return; + + GUIDialogMenu menu = (GUIDialogMenu)GUIWindowManager.GetWindow((int)GUIWindow.Window.WINDOW_DIALOG_MENU); + menu.Reset(); + + menu.SetHeading("Channel List"); + foreach (PlayListItem item in playlist) + menu.Add(item.Description); + if (menu.SelectedId == -1) return; + else + { + currentChannel = menu.SelectedId - 1; + Play(currentChannel); + } + + base.OnShowContextMenu(); + } + + protected void LoadAndPlay(string plFile) + { + GUIPropertyManager.SetProperty("#IPTV.View.channel", ""); + if(plFile.Equals("")) return; + + playlist.Clear(); + bool result = plvi.Load(playlist, plFile); + if (result) + { + if (currentChannel < playlist.Count) Play(currentChannel); + else if (playlist.Count > 0) Play(0); + } + } + + public static string GetDefaultPlayList() + { + string plFile; + string dir = Directory.GetCurrentDirectory(); + using (MediaPortal.Profile.Settings reader = new MediaPortal.Profile.Settings(dir + @"\MyIPTV.xml")) + { + plFile = reader.GetValueAsString("settings", "DefaultPlayList", ""); + } + return plFile; + } + + public static string GetPlayListDir() + { + string plDir; + string dir = Directory.GetCurrentDirectory(); + using (MediaPortal.Profile.Settings reader = new MediaPortal.Profile.Settings(dir + @"\MyIPTV.xml")) + { + plDir = reader.GetValueAsString("settings", "PlayListDir", ""); + } + return plDir; + } + + public static void Play(int plIndex) + { + if (plIndex > playlist.Count) return; + + PlayListItem item = playlist[plIndex]; + Log.Info("MyIPTV: Trying to play channel '" + item.Description + "' (" + item.FileName + ")."); + GUIGraphicsContext.IsFullScreenVideo = false; + g_Player.Play(item.FileName); + GUIPropertyManager.SetProperty("#IPTV.View.channel", item.Description); + } + } +} \ No newline at end of file Property changes on: trunk/plugins/IPTV@UT/IPTV@UT/IPTV.cs ___________________________________________________________________ Name: svn:eol-style + native Added: trunk/plugins/IPTV@UT/IPTV@UT/IPTV@UT.csproj =================================================================== --- trunk/plugins/IPTV@UT/IPTV@UT/IPTV@UT.csproj (rev 0) +++ trunk/plugins/IPTV@UT/IPTV@UT/IPTV@UT.csproj 2007-01-29 21:35:54 UTC (rev 47) @@ -0,0 +1,78 @@ +<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <PropertyGroup> + <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> + <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> + <ProductVersion>8.0.50727</ProductVersion> + <SchemaVersion>2.0</SchemaVersion> + <ProjectGuid>{FB58017D-6946-49EB-A0B7-F446BCA01A72}</ProjectGuid> + <OutputType>Library</OutputType> + <AppDesignerFolder>Properties</AppDesignerFolder> + <RootNamespace>MediaPortal.GUI.IPTV</RootNamespace> + <AssemblyName>IPTV</AssemblyName> + </PropertyGroup> + <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> + <DebugSymbols>true</DebugSymbols> + <DebugType>full</DebugType> + <Optimize>false</Optimize> + <OutputPath>bin\Debug\</OutputPath> + <DefineConstants>DEBUG;TRACE</DefineConstants> + <ErrorReport>prompt</ErrorReport> + <WarningLevel>4</WarningLevel> + </PropertyGroup> + <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> + <DebugType>pdbonly</DebugType> + <Optimize>true</Optimize> + <OutputPath>bin\Release\</OutputPath> + <DefineConstants>TRACE</DefineConstants> + <ErrorReport>prompt</ErrorReport> + <WarningLevel>4</WarningLevel> + </PropertyGroup> + <ItemGroup> + <Reference Include="Core, Version=1.0.2524.28381, Culture=neutral, processorArchitecture=MSIL"> + <SpecificVersion>False</SpecificVersion> + <HintPath>..\..\trunk\mediaportal\xbmc\bin\Release\Core.dll</HintPath> + </Reference> + <Reference Include="Dialogs, Version=0.0.0.0, Culture=neutral, processorArchitecture=MSIL"> + <SpecificVersion>False</SpecificVersion> + <HintPath>..\..\trunk\mediaportal\Dialogs\bin\Release\Dialogs.dll</HintPath> + </Reference> + <Reference Include="ExternalPlayers, Version=1.0.2543.36238, Culture=neutral, processorArchitecture=MSIL"> + <SpecificVersion>False</SpecificVersion> + <HintPath>..\..\trunk\mediaportal\ExternalPlayers\bin\Release\ExternalPlayers.dll</HintPath> + </Reference> + <Reference Include="System" /> + <Reference Include="System.Data" /> + <Reference Include="System.DirectoryServices" /> + <Reference Include="System.Drawing" /> + <Reference Include="System.Windows.Forms" /> + <Reference Include="System.Xml" /> + </ItemGroup> + <ItemGroup> + <Compile Include="ConfigurationForm.cs"> + <SubType>Form</SubType> + </Compile> + <Compile Include="ConfigurationForm.Designer.cs"> + <DependentUpon>ConfigurationForm.cs</DependentUpon> + </Compile> + <Compile Include="IPTV.cs" /> + <Compile Include="PlayListVLCIO.cs" /> + <Compile Include="PlayListVLCItem.cs" /> + <Compile Include="Properties\AssemblyInfo.cs" /> + <Compile Include="ShowWaitCursor.cs" /> + <Compile Include="IPTVPlugin.cs" /> + </ItemGroup> + <ItemGroup> + <EmbeddedResource Include="ConfigurationForm.resx"> + <SubType>Designer</SubType> + <DependentUpon>ConfigurationForm.cs</DependentUpon> + </EmbeddedResource> + </ItemGroup> + <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" /> + <!-- To modify your build process, add your task inside one of the targets below and uncomment it. + Other similar extension points exist, see Microsoft.Common.targets. + <Target Name="BeforeBuild"> + </Target> + <Target Name="AfterBuild"> + </Target> + --> +</Project> \ No newline at end of file Property changes on: trunk/plugins/IPTV@UT/IPTV@UT/IPTV@UT.csproj ___________________________________________________________________ Name: svn:eol-style + native Added: trunk/plugins/IPTV@UT/IPTV@UT/IPTVPlugin.cs =================================================================== --- trunk/plugins/IPTV@UT/IPTV@UT/IPTVPlugin.cs (rev 0) +++ trunk/plugins/IPTV@UT/IPTV@UT/IPTVPlugin.cs 2007-01-29 21:35:54 UTC (rev 47) @@ -0,0 +1,120 @@ +#region Copyright (C) 2005-2006 Team MediaPortal + +/* + * Copyright (C) 2005-2006 Team MediaPortal + * http://www.team-mediaportal.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, 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 GNU Make; see the file COPYING. If not, write to + * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. + * http://www.gnu.org/copyleft/gpl.html + * + */ + +#endregion + +using System; +using System.ComponentModel; +using System.Windows.Forms; +using System.Net; + +using MediaPortal.GUI.Library; + +namespace MediaPortal.GUI.IPTV +{ + public class IPTVPlugin : ISetupForm, IShowPlugin + { + // Returns the name of the plugin which is shown in the plugin menu + public string PluginName() + { + return "My IPTV"; + } + + // Returns the description of the plugin is shown in the plugin menu + public string Description() + { + return "View digital TV channels from an M3U playlist (uses VideoLan external player)"; + } + + // Returns the author of the plugin which is shown in the plugin menu + public string Author() + { + return "Moiristo"; + } + + // show the setup dialog + public void ShowPlugin() + { + ConfigurationForm form = new ConfigurationForm(); + form.ShowDialog(); + } + + // Indicates whether plugin can be enabled/disabled + public bool CanEnable() + { + return true; + } + + // get ID of windowplugin belonging to this setup + public int GetWindowId() + { + return 7500; + } + + // Indicates if plugin is enabled by default; + public bool DefaultEnabled() + { + return true; + } + // indicates if a plugin has its own setup screen + public bool HasSetup() + { + return true; + } + + /// <summary> + /// If the plugin should have its own button on the main menu of Mediaportal then it + /// should return true to this method, otherwise if it should not be on home + /// it should return false + /// </summary> + /// <param name="strButtonText">text the button should have</param> + /// <param name="strButtonImage">image for the button, or empty for default</param> + /// <param name="strButtonImageFocus">image for the button, or empty for default</param> + /// <param name="strPictureImage">subpicture for the button or empty for none</param> + /// <returns>true : plugin needs its own button on home + /// false : plugin does not need its own button on home</returns> + public bool GetHome(out string strButtonText, out string strButtonImage, out string strButtonImageFocus, out string strPictureImage) + { + string buttonText = GUIPropertyManager.GetProperty("#name"); + if (buttonText.Equals("")) buttonText = PluginName(); + + strButtonText = buttonText; + strButtonImage = String.Empty; + strButtonImageFocus = String.Empty; + strPictureImage = "hover_my tv.png"; + return true; + } + + #region IShowPlugin Members + + public bool ShowDefaultHome() + { + return true; + } + + #endregion + + } +} + + Property changes on: trunk/plugins/IPTV@UT/IPTV@UT/IPTVPlugin.cs ___________________________________________________________________ Name: svn:eol-style + native Added: trunk/plugins/IPTV@UT/IPTV@UT/PlayListVLCIO.cs =================================================================== --- trunk/plugins/IPTV@UT/IPTV@UT/PlayListVLCIO.cs (rev 0) +++ trunk/plugins/IPTV@UT/IPTV@UT/PlayListVLCIO.cs 2007-01-29 21:35:54 UTC (rev 47) @@ -0,0 +1,176 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.IO; +using MediaPortal.Util; +using MediaPortal.Playlists; +using MediaPortal.GUI.Library; + +namespace MediaPortal.GUI.IPTV +{ + public class PlayListVLCIO : IPlayListIO + { + const string M3U_START_MARKER = "#EXTM3U"; + const string M3U_INFO_MARKER = "#EXTINF"; + const string M3U_COMMENT_MARKER = "##"; + const string VLC_OPT_MARKER = "#EXTVLCOPT"; + + public PlayList playlist; + private StreamReader file; + private string basePath; + + public PlayListVLCIO() + { + } + + public bool Load(PlayList incomingPlaylist, string playlistFileName) + { + Log.Info("MyIPTV: Loading " + playlistFileName); + if (playlistFileName == null) + return false; + playlist = incomingPlaylist; + playlist.Clear(); + + try + { + playlist.Name = Path.GetFileName(playlistFileName); + basePath = Path.GetDirectoryName(Path.GetFullPath(playlistFileName)); + + using (file = new StreamReader(playlistFileName)) + { + if (file == null) + return false; + + string line = file.ReadLine(); + if (line == null || line.Length == 0) + return false; + + string trimmedLine = line.Trim(); + + if (trimmedLine != M3U_START_MARKER) + { + //This is probably not a valid M3u file + return false; + } + + Boolean parseChannel = false; + PlayListVLCItem currentItem = null; + while ((line = file.ReadLine()) != null) + { + trimmedLine = line.Trim(); + + if (trimmedLine.StartsWith(M3U_COMMENT_MARKER) || trimmedLine.Equals("")) + { + //Just ignore this + } + else if (trimmedLine.StartsWith(M3U_INFO_MARKER)) + { + parseChannel = true; + string channelName = null; + int lDuration = 0; + + if (ExtractM3uInfo(trimmedLine, ref channelName, ref lDuration)) + { + currentItem = new PlayListVLCItem(channelName, lDuration); + currentItem.Type = PlayListItem.PlayListItemType.VideoStream; + } + } + else if (trimmedLine.StartsWith(VLC_OPT_MARKER)) + { + if (!parseChannel || currentItem == null) + { + //No EXTINF tag found, give default name + parseChannel = true; + currentItem = new PlayListVLCItem("Stream " + playlist.Count, -1); + currentItem.Type = PlayListItem.PlayListItemType.VideoStream; + } + + string option = null; + if (ExtractVLCInfo(trimmedLine, ref option)) + { + currentItem.AddOption(option); + } + } + else + { + //Stream found? + if (!parseChannel || currentItem == null) + { + //No EXTINF tag or EXTVLCOPT found, give default name & no parameters + currentItem = new PlayListVLCItem("Stream " + playlist.Count, -1); + currentItem.Type = PlayListItem.PlayListItemType.VideoStream; + } + + //(TODO: Validate that this really is stream data and not some rubbish) + //Filename = StreamName in this case + currentItem.FileName = trimmedLine; + + //Add it to the playlist + playlist.Add(currentItem); + + //Finally, tell that we just ended parsing a channel + parseChannel = false; + } + } + } + } + catch (Exception ex) + { + Log.Info("MyIPTV: Exception loading playlist {0} err:{1} stack:{2}", playlistFileName, ex.Message, ex.StackTrace); + return false; + } + return true; + } + + private static bool ExtractM3uInfo(string trimmedLine, ref string channelName, ref int lDuration) + { + //bool successfull; + int iColon = (int)trimmedLine.IndexOf(":"); + int iComma = (int)trimmedLine.IndexOf(","); + if (iColon >= 0 && iComma >= 0 && iComma > iColon) + { + iColon++; + string duration = trimmedLine.Substring(iColon, iComma - iColon); + iComma++; + channelName = trimmedLine.Substring(iComma); + lDuration = System.Int32.Parse(duration); + return true; + } + return false; + } + + private static bool ExtractVLCInfo(string trimmedLine, ref string option) + { + //bool successfull; + int iColon = (int)trimmedLine.IndexOf(":"); + if (iColon >= 0) + { + iColon++; + option = trimmedLine.Substring(iColon); + return true; + } + return false; + } + + public void Save(PlayList playlist, string fileName) + { + try + { + using (StreamWriter writer = new StreamWriter(fileName, false)) + { + writer.WriteLine(M3U_START_MARKER); + + foreach (PlayListItem item in playlist) + { + writer.WriteLine("{0}:{1},{2}", M3U_INFO_MARKER, item.Duration, item.Description); + writer.WriteLine("{0}", item.FileName); + } + } + } + catch (Exception e) + { + Log.Info("MyIPTV: Failed to save a playlist {0}. err: {1} stack: {2}", fileName, e.Message, e.StackTrace); + } + } + } +} Property changes on: trunk/plugins/IPTV@UT/IPTV@UT/PlayListVLCIO.cs ___________________________________________________________________ Name: svn:eol-style + native Added: trunk/plugins/IPTV@UT/IPTV@UT/PlayListVLCItem.cs =================================================================== --- trunk/plugins/IPTV@UT/IPTV@UT/PlayListVLCItem.cs (rev 0) +++ trunk/plugins/IPTV@UT/IPTV@UT/PlayListVLCItem.cs 2007-01-29 21:35:54 UTC (rev 47) @@ -0,0 +1,37 @@ +using System; +using System.Collections.Generic; +using System.Text; +using MediaPortal.Playlists; + +namespace MediaPortal.GUI.IPTV +{ + class PlayListVLCItem : PlayListItem + { + protected List<string> _options = new List<string>(); + + public PlayListVLCItem(string description, int duration) + { + if (description == null) + return; + _description = description; + _duration = duration; + } + + public List<string> Options + { + get { return _options; } + set + { + if (value == null) + return; + _options = value; + } + } + + public void AddOption(string option) + { + Options.Add(option); + } + + } +} Property changes on: trunk/plugins/IPTV@UT/IPTV@UT/PlayListVLCItem.cs ___________________________________________________________________ Name: svn:eol-style + native Added: trunk/plugins/IPTV@UT/IPTV@UT/Properties/AssemblyInfo.cs =================================================================== --- trunk/plugins/IPTV@UT/IPTV@UT/Properties/AssemblyInfo.cs (rev 0) +++ trunk/plugins/IPTV@UT/IPTV@UT/Properties/AssemblyInfo.cs 2007-01-29 21:35:54 UTC (rev 47) @@ -0,0 +1,35 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("IPTV")] +[assembly: AssemblyDescription("IPTV plugin (using VLC) for MediaPortal")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("UT")] +[assembly: AssemblyProduct("IPTV")] +[assembly: AssemblyCopyright("Copyright © UT 2006")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("c1930e93-c8e6-486d-bde0-a6faf4753e69")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Revision and Build Numbers +// by using the '*' as shown below: +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] Property changes on: trunk/plugins/IPTV@UT/IPTV@UT/Properties/AssemblyInfo.cs ___________________________________________________________________ Name: svn:eol-style + native Added: trunk/plugins/IPTV@UT/IPTV@UT/ShowWaitCursor.cs =================================================================== --- trunk/plugins/IPTV@UT/IPTV@UT/ShowWaitCursor.cs (rev 0) +++ trunk/plugins/IPTV@UT/IPTV@UT/ShowWaitCursor.cs 2007-01-29 21:35:54 UTC (rev 47) @@ -0,0 +1,139 @@ +using System; +using System.IO; +using System.Net; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text; +using System.Threading; +using MediaPortal.Dialogs; +using MediaPortal.GUI.Library; + +namespace MediaPortal.GUI.IPTV +{ + public class ShowWaitCursor + { + private string result = String.Empty; + private string workUrl = String.Empty; + private bool _workerCompleted = true; + private bool Cookies = false; + private string agent = "Mozilla/4.0 (compatible; MSIE 6.0; WindowsNT 5.0; .NET CLR 1 .1.4322)"; + private string postType = "application/x-www-form-urlencoded"; + private string secondUrl = String.Empty; + private HttpWebRequest firstRequest = null; + private HttpWebResponse firstResponse = null; + private Stream recstream = null; + + public string GetUrl(string url) + { + workUrl = url; + + if (_workerCompleted) + { + _workerCompleted = false; + + BackgroundWorker worker = new BackgroundWorker(); + + worker.DoWork += new DoWorkEventHandler(DownloadWorker); + worker.RunWorkerAsync(url); + + using (WaitCursor cursor = new WaitCursor()) + { + while (_workerCompleted == false) + GUIWindowManager.Process(); + } + } + return result; + } + + public string GetUrl(string url, bool useCookies) + { + Cookies = useCookies; + secondUrl = url; + + if (_workerCompleted) + { + _workerCompleted = false; + + BackgroundWorker worker = new BackgroundWorker(); + + worker.DoWork += new DoWorkEventHandler(DownloadWorker); + worker.RunWorkerAsync(url); + + using (WaitCursor cursor = new WaitCursor()) + { + while (_workerCompleted == false) + GUIWindowManager.Process(); + } + } + return result; + } + + public void DownloadWorker(object sender, DoWorkEventArgs e) + { + if (Cookies==false) + { + firstRequest = (HttpWebRequest)WebRequest.Create(workUrl); + firstRequest.UserAgent = agent; + firstRequest.ContentType = postType; + firstRequest.CookieContainer = new CookieContainer(); + firstResponse = (HttpWebResponse) + firstRequest.GetResponse(); + recstream = firstResponse.GetResponseStream(); + } + if (Cookies == true) + { + HttpWebRequest secondRequest = (HttpWebRequest)WebRequest.Create(secondUrl); + secondRequest.UserAgent = agent; + secondRequest.ContentType = postType; + secondRequest.CookieContainer = new CookieContainer(); + CookieCollection cookies = firstResponse.Cookies; + secondRequest.CookieContainer.Add(cookies); + + HttpWebResponse secondResponse = (HttpWebResponse)secondRequest.GetResponse(); + recstream = secondResponse.GetResponseStream(); + //secondResponse.Close(); + } + StringBuilder sb = new StringBuilder(); + + byte[] buf = new byte[8192]; + + string tempstring = null; + int count = 0; + + do + { + count = recstream.Read(buf, 0, buf.Length); + if (count != 0) + { + tempstring = Encoding.UTF8.GetString(buf, 0, count); + sb.Append(tempstring); + } + } + while (count > 0); + + result = sb.ToString(); + Cookies = false; + //recstream.Close(); + + _workerCompleted = true; + } + + public string DownloadImage(string url) + { + try + { + WebClient wc = new WebClient(); + string filename = url.Substring(url.LastIndexOf("/") + 1); + wc.DownloadFile(url, @"thumbs\MPTemp-" + filename); + while (System.IO.File.Exists(@"thumbs\MPTemp-" + filename) != true) + GUIWindowManager.Process(); + return @"thumbs\MPTemp-" + filename; + } + catch (Exception) + { + return string.Empty; + } + } + + } +} Property changes on: trunk/plugins/IPTV@UT/IPTV@UT/ShowWaitCursor.cs ___________________________________________________________________ Name: svn:eol-style + native Added: trunk/plugins/IPTV@UT/IP...@UT...n =================================================================== --- trunk/plugins/IPTV@UT/IP...@UT...n (rev 0) +++ trunk/plugins/IPTV@UT/IP...@UT...n 2007-01-29 21:35:54 UTC (rev 47) @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 9.00 +# Visual Studio 2005 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IPTV@UT", "IPTV@UT\IPTV@UT.csproj", "{FB58017D-6946-49EB-A0B7-F446BCA01A72}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {FB58017D-6946-49EB-A0B7-F446BCA01A72}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {FB58017D-6946-49EB-A0B7-F446BCA01A72}.Debug|Any CPU.Build.0 = Debug|Any CPU + {FB58017D-6946-49EB-A0B7-F446BCA01A72}.Release|Any CPU.ActiveCfg = Release|Any CPU + {FB58017D-6946-49EB-A0B7-F446BCA01A72}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal Property changes on: trunk/plugins/IPTV@UT/IP...@UT...n ___________________________________________________________________ Name: svn:eol-style + native Added: trunk/plugins/IPTV@UT/IP...@UT...o =================================================================== (Binary files differ) Property changes on: trunk/plugins/IPTV@UT/IP...@UT...o ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/plugins/IPTV@UT/[ Default Skin ]/MP_0.2.1/MyIPTV.xml =================================================================== --- trunk/plugins/IPTV@UT/[ Default Skin ]/MP_0.2.1/MyIPTV.xml (rev 0) +++ trunk/plugins/IPTV@UT/[ Default Skin ]/MP_0.2.1/MyIPTV.xml 2007-01-29 21:35:54 UTC (rev 47) @@ -0,0 +1,89 @@ +<window> + <id>7500</id> + + <defaultcontrol>2</defaultcontrol> + + <allowoverlay>no</allowoverlay> + + <define>#header.label:My IPTV</define> + <define>#header.image:</define> + <define>#header.hover:hover_my tv.png</define> + + <controls> + <import>common.window.xml</import> + + <control> + <type>group</type> + <layout>StackLayout</layout> + <description>group element</description> + + <posX>60</posX> + <posY>97</posY> + <control> + <description>Load Playlist button</description> + <type>button</type> + <id>2</id> + <label>Load...</label> + <onup>17</onup> + <ondown>3</ondown> + <onright>99</onright> + </control> + </control> + + <control> + <description>TV background</description> + + <type>image</type> + + <id>1</id> + + <posX>281</posX> + + <posY>87</posY> + + <width>396</width> + + <height>335</height> + + <texture>tv_background.png</texture> + </control> + + <control> + <description>video window</description> + + <type>videowindow</type> + + <id>99</id> + + <posX>300</posX> + + <posY>107</posY> + + <width>350</width> + + <height>260</height> + + <onleft>2</onleft> + + <onright>2</onright> + + <action>18</action> + + <textureFocus>tv_green_border.png</textureFocus> + </control> + + <control> + <description>Current Channelname</description> + <type>fadelabel</type> + <id>13</id> + <posX>300</posX> + <posY>435</posY> + <width>350</width> + <label>#IPTV.View.channel</label> + <font>font13</font> + <align>center</align> + <textcolor>white</textcolor> + + </control> + </controls> +</window> \ No newline at end of file Property changes on: trunk/plugins/IPTV@UT/[ Default Skin ]/MP_0.2.1/MyIPTV.xml ___________________________________________________________________ Name: svn:eol-style + native Added: trunk/plugins/IPTV@UT/[ Default Skin ]/MP_0.2.1_SVN/MyIPTV.xml =================================================================== --- trunk/plugins/IPTV@UT/[ Default Skin ]/MP_0.2.1_SVN/MyIPTV.xml (rev 0) +++ trunk/plugins/IPTV@UT/[ Default Skin ]/MP_0.2.1_SVN/MyIPTV.xml 2007-01-29 21:35:54 UTC (rev 47) @@ -0,0 +1,97 @@ +<window> + <id>7500</id> + + <defaultcontrol>2</defaultcontrol> + + <allowoverlay>no</allowoverlay> + + <define>#header.label:My IPTV</define> + <define>#header.image:</define> + <define>#header.hover:hover_my tv.png</define> + + <controls> + <import>common.window.xml</import> + + <control> + <type>group</type> + <animation effect="fade" time="250">WindowOpen</animation> + <animation effect="fade" time="500">WindowClose</animation> + <animation effect="slide" time="250" start="-300,0">WindowOpen</animation> + <animation effect="slide" time="500" end="0,-300" >WindowClose</animation> + <layout>StackLayout</layout> + <description>group element</description> + + <posX>60</posX> + <posY>97</posY> + <control> + <description>Load Playlist button</description> + <type>button</type> + <id>2</id> + <label>Load...</label> + <onup>17</onup> + <ondown>3</ondown> + <onright>99</onright> + </control> + </control> + + <control> + <description>TV background</description> + + <type>image</type> + + <id>1</id> + + <posX>281</posX> + + <posY>87</posY> + + <width>396</width> + + <height>335</height> + + <texture>tv_background.png</texture> + <animation effect="fade" time="250">WindowOpen</animation> + <animation effect="fade" time="500">WindowClose</animation> + </control> + + <control> + <description>video window</description> + + <type>videowindow</type> + + <id>99</id> + + <posX>300</posX> + + <posY>107</posY> + + <width>350</width> + + <height>260</height> + + <onleft>2</onleft> + + <onright>2</onright> + + <action>18</action> + + <textureFocus>tv_green_border.png</textureFocus> + <animation effect="fade" time="250">WindowOpen</animation> + <animation effect="fade" time="500">WindowClose</animation> + </control> + + <control> + <description>Current Channelname</description> + <type>fadelabel</type> + <id>13</id> + <posX>300</posX> + <posY>435</posY> + <width>350</width> + <label>#IPTV.View.channel</label> + <font>font13</font> + <align>center</align> + <textcolor>white</textcolor> + + </control> + </controls> +</window> \ No newline at end of file Property changes on: trunk/plugins/IPTV@UT/[ Default Skin ]/MP_0.2.1_SVN/MyIPTV.xml ___________________________________________________________________ Name: svn:eol-style + native Added: trunk/plugins/IPTV@UT/[ Project Mayhem 3 ]/MyIPTV.xml =================================================================== --- trunk/plugins/IPTV@UT/[ Project Mayhem 3 ]/MyIPTV.xml (rev 0) +++ trunk/plugins/IPTV@UT/[ Project Mayhem 3 ]/MyIPTV.xml 2007-01-29 21:35:54 UTC (rev 47) @@ -0,0 +1,115 @@ +<window> + <id>7500</id> + + <defaultcontrol>2</defaultcontrol> + + <allowoverlay>no</allowoverlay> + + <define>#header.label:My IPTV</define> + <define>#header.image:</define> + <define>#header.hover:hover_my tv.png</define> + + <controls> + <import>common.window.xml</import> + + <control> + <description>background image</description> + + <type>image</type> + + <id>1</id> + + <posX>0</posX> + + <posY>0</posY> + + <width>720</width> + + <height>576</height> + + <texture>background-xlink16x9.png</texture> + </control> + + <control> + <type>group</type> + <animation effect="fade" time="250">WindowOpen</animation> + <animation effect="fade" time="500">WindowClose</animation> + <animation effect="slide" time="250" start="-300,0">WindowOpen</animation> + <animation effect="slide" time="500" end="0,-300" >WindowClose</animation> + <layout>StackLayout</layout> + ... [truncated message content] |