From: <fr...@us...> - 2007-08-10 06:06:00
|
Revision: 823 http://mp-plugins.svn.sourceforge.net/mp-plugins/?rev=823&view=rev Author: framug Date: 2007-08-09 23:05:54 -0700 (Thu, 09 Aug 2007) Log Message: ----------- own xml config file Modified Paths: -------------- trunk/plugins/MyExplorer/GUIExplorer.cs trunk/plugins/MyExplorer/SetupForm.cs Modified: trunk/plugins/MyExplorer/GUIExplorer.cs =================================================================== --- trunk/plugins/MyExplorer/GUIExplorer.cs 2007-08-09 16:23:38 UTC (rev 822) +++ trunk/plugins/MyExplorer/GUIExplorer.cs 2007-08-10 06:05:54 UTC (rev 823) @@ -770,18 +770,18 @@ /// </summary> private void LoadShareSettings() { - using(MediaPortal.Profile.Settings xmlreader = new MediaPortal.Profile.Settings("MediaPortal.xml")) + using (MediaPortal.Profile.Settings xmlreader = new MediaPortal.Profile.Settings("MyExplorer.xml")) { showOnlyShares=xmlreader.GetValueAsBool("myexplorer","show_only_shares",false); } } /// <summary> - /// Loads all Settings from MediaPortal.xml + /// Loads all Settings from MyExplorer.xml /// </summary> private void LoadSettings() { - using(MediaPortal.Profile.Settings xmlreader = new MediaPortal.Profile.Settings("MediaPortal.xml")) + using (MediaPortal.Profile.Settings xmlreader = new MediaPortal.Profile.Settings("MyExplorer.xml")) { tempFolder=xmlreader.GetValueAsString("myexplorer","temp_folder",""); enableDelete=xmlreader.GetValueAsBool("myexplorer","enable_delete",false); Modified: trunk/plugins/MyExplorer/SetupForm.cs =================================================================== --- trunk/plugins/MyExplorer/SetupForm.cs 2007-08-09 16:23:38 UTC (rev 822) +++ trunk/plugins/MyExplorer/SetupForm.cs 2007-08-10 06:05:54 UTC (rev 823) @@ -319,7 +319,7 @@ private void LoadSettings() { - using (MediaPortal.Profile.Settings xmlreader = new MediaPortal.Profile.Settings("MediaPortal.xml")) + using (MediaPortal.Profile.Settings xmlreader = new MediaPortal.Profile.Settings("MyExplorer.xml")) { textBox1.Text = xmlreader.GetValueAsString("myexplorer", "temp_folder", ""); checkBox1.Checked = xmlreader.GetValueAsBool("myexplorer", "show_only_shares", false); @@ -331,7 +331,7 @@ private void SaveSettings() { - using (MediaPortal.Profile.Settings xmlwriter = new MediaPortal.Profile.Settings("MediaPortal.xml")) + using (MediaPortal.Profile.Settings xmlwriter = new MediaPortal.Profile.Settings("MyExplorer.xml")) { xmlwriter.SetValue("myexplorer", "temp_folder", textBox1.Text); xmlwriter.SetValueAsBool("myexplorer", "show_only_shares", checkBox1.Checked); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fr...@us...> - 2008-04-26 11:49:11
|
Revision: 1721 http://mp-plugins.svn.sourceforge.net/mp-plugins/?rev=1721&view=rev Author: framug Date: 2008-04-26 04:49:08 -0700 (Sat, 26 Apr 2008) Log Message: ----------- - MyExplorer.xml is loaded/written in correct folder. Modified Paths: -------------- trunk/plugins/MyExplorer/GUIExplorer.cs trunk/plugins/MyExplorer/SetupForm.cs Modified: trunk/plugins/MyExplorer/GUIExplorer.cs =================================================================== --- trunk/plugins/MyExplorer/GUIExplorer.cs 2008-04-26 11:46:12 UTC (rev 1720) +++ trunk/plugins/MyExplorer/GUIExplorer.cs 2008-04-26 11:49:08 UTC (rev 1721) @@ -26,6 +26,7 @@ using MediaPortal.Util; using MediaPortal.GUI.Library; using MediaPortal.Dialogs; +using MediaPortal.Configuration; #endregion namespace MediaPortal.GUI.GUIExplorer @@ -770,7 +771,7 @@ /// </summary> private void LoadShareSettings() { - using (MediaPortal.Profile.Settings xmlreader = new MediaPortal.Profile.Settings("MyExplorer.xml")) + using (MediaPortal.Profile.Settings xmlreader = new MediaPortal.Profile.Settings(Config.GetFile(Config.Dir.Config, "MyExplorer.xml"))) { showOnlyShares=xmlreader.GetValueAsBool("myexplorer","show_only_shares",false); } @@ -781,7 +782,7 @@ /// </summary> private void LoadSettings() { - using (MediaPortal.Profile.Settings xmlreader = new MediaPortal.Profile.Settings("MyExplorer.xml")) + using (MediaPortal.Profile.Settings xmlreader = new MediaPortal.Profile.Settings(Config.GetFile(Config.Dir.Config, "MyExplorer.xml"))) { tempFolder=xmlreader.GetValueAsString("myexplorer","temp_folder",""); enableDelete=xmlreader.GetValueAsBool("myexplorer","enable_delete",false); Modified: trunk/plugins/MyExplorer/SetupForm.cs =================================================================== --- trunk/plugins/MyExplorer/SetupForm.cs 2008-04-26 11:46:12 UTC (rev 1720) +++ trunk/plugins/MyExplorer/SetupForm.cs 2008-04-26 11:49:08 UTC (rev 1721) @@ -29,6 +29,7 @@ using System.ComponentModel; using System.Windows.Forms; using MediaPortal.GUI.Library; +using MediaPortal.Configuration; namespace GUIExplorer { @@ -319,7 +320,7 @@ private void LoadSettings() { - using (MediaPortal.Profile.Settings xmlreader = new MediaPortal.Profile.Settings("MyExplorer.xml")) + using (MediaPortal.Profile.Settings xmlreader = new MediaPortal.Profile.Settings(Config.GetFile(Config.Dir.Config, "MyExplorer.xml"))) { textBox1.Text = xmlreader.GetValueAsString("myexplorer", "temp_folder", ""); checkBox1.Checked = xmlreader.GetValueAsBool("myexplorer", "show_only_shares", false); @@ -331,7 +332,7 @@ private void SaveSettings() { - using (MediaPortal.Profile.Settings xmlwriter = new MediaPortal.Profile.Settings("MyExplorer.xml")) + using (MediaPortal.Profile.Settings xmlwriter = new MediaPortal.Profile.Settings(Config.GetFile(Config.Dir.Config, "MyExplorer.xml"))) { xmlwriter.SetValue("myexplorer", "temp_folder", textBox1.Text); xmlwriter.SetValueAsBool("myexplorer", "show_only_shares", checkBox1.Checked); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fr...@us...> - 2008-05-19 17:30:05
|
Revision: 1796 http://mp-plugins.svn.sourceforge.net/mp-plugins/?rev=1796&view=rev Author: framug Date: 2008-05-19 10:30:00 -0700 (Mon, 19 May 2008) Log Message: ----------- - XmlConfig for setup. - Add .png files (taken in MP folders). Modified Paths: -------------- trunk/plugins/MyExplorer/My Explorer.csproj trunk/plugins/MyExplorer/SetupForm.cs Added Paths: ----------- trunk/plugins/MyExplorer/XmlConfig.cs trunk/plugins/MyExplorer/skin/BlueTwo/Media/ trunk/plugins/MyExplorer/skin/BlueTwo/Media/explorer_logo.png trunk/plugins/MyExplorer/skin/BlueTwo/Media/hover_my explorer.png trunk/plugins/MyExplorer/skin/BlueTwo wide/Media/ trunk/plugins/MyExplorer/skin/BlueTwo wide/Media/explorer_logo.png trunk/plugins/MyExplorer/skin/BlueTwo wide/Media/hover_my explorer.png Modified: trunk/plugins/MyExplorer/My Explorer.csproj =================================================================== --- trunk/plugins/MyExplorer/My Explorer.csproj 2008-05-19 17:25:05 UTC (rev 1795) +++ trunk/plugins/MyExplorer/My Explorer.csproj 2008-05-19 17:30:00 UTC (rev 1796) @@ -55,6 +55,7 @@ <Compile Include="SetupForm.cs"> <SubType>Form</SubType> </Compile> + <Compile Include="XmlConfig.cs" /> </ItemGroup> <ItemGroup> <EmbeddedResource Include="SetupForm.resx"> Modified: trunk/plugins/MyExplorer/SetupForm.cs =================================================================== --- trunk/plugins/MyExplorer/SetupForm.cs 2008-05-19 17:25:05 UTC (rev 1795) +++ trunk/plugins/MyExplorer/SetupForm.cs 2008-05-19 17:30:00 UTC (rev 1796) @@ -320,19 +320,26 @@ private void LoadSettings() { - using (MediaPortal.Profile.Settings xmlreader = new MediaPortal.Profile.Settings(Config.GetFile(Config.Dir.Config, "MyExplorer.xml"))) +/* using (MediaPortal.Profile.Settings xmlreader = new MediaPortal.Profile.Settings(Config.GetFile(Config.Dir.Config, "MyExplorer.xml"))) { textBox1.Text = xmlreader.GetValueAsString("myexplorer", "temp_folder", ""); checkBox1.Checked = xmlreader.GetValueAsBool("myexplorer", "show_only_shares", false); checkBox2.Checked = xmlreader.GetValueAsBool("myexplorer", "enable_delete", false); checkBox3.Checked = xmlreader.GetValueAsBool("myexplorer", "delete_immediately", false); checkBox4.Checked = xmlreader.GetValueAsBool("myexplorer", "delete_temp", false); - } - } + } */ + XmlConfig XmlConfig = new XmlConfig(); + textBox1.Text = XmlConfig.ReadXmlConfig("MyExplorer", "myexplorer", "temp_folder", ""); + checkBox1.Checked = XmlConfig.ReadXmlConfig("MyExplorer", "myexplorer", "show_only_shares", false); + checkBox2.Checked = XmlConfig.ReadXmlConfig("MyExplorer", "myexplorer", "enable_delete", false); + checkBox3.Checked = XmlConfig.ReadXmlConfig("MyExplorer", "myexplorer", "delete_immediately", false); + checkBox4.Checked = XmlConfig.ReadXmlConfig("MyExplorer", "myexplorer", "delete_temp", false); + } + private void SaveSettings() { - using (MediaPortal.Profile.Settings xmlwriter = new MediaPortal.Profile.Settings(Config.GetFile(Config.Dir.Config, "MyExplorer.xml"))) +/* using (MediaPortal.Profile.Settings xmlwriter = new MediaPortal.Profile.Settings(Config.GetFile(Config.Dir.Config, "MyExplorer.xml"))) { xmlwriter.SetValue("myexplorer", "temp_folder", textBox1.Text); xmlwriter.SetValueAsBool("myexplorer", "show_only_shares", checkBox1.Checked); @@ -354,7 +361,29 @@ xmlwriter.SetValueAsBool("myexplorer", "delete_immediately", false); xmlwriter.SetValueAsBool("myexplorer", "delete_temp", false); } + } */ + + XmlConfig XmlConfig = new XmlConfig(); + XmlConfig.WriteXmlConfig("MyExplorer", "myexplorer", "temp_folder", textBox1.Text); + XmlConfig.WriteXmlConfig("MyExplorer", "myexplorer", "show_only_shares", checkBox1.Checked); + XmlConfig.WriteXmlConfig("MyExplorer", "myexplorer", "enable_delete", checkBox2.Checked); + if (checkBox2.Checked == true) + { + XmlConfig.WriteXmlConfig("MyExplorer", "myexplorer", "delete_immediately", checkBox3.Checked); + if (checkBox3.Checked == true) + { + XmlConfig.WriteXmlConfig("MyExplorer", "myexplorer", "delete_temp", false); + } + else + { + XmlConfig.WriteXmlConfig("MyExplorer", "myexplorer", "delete_temp", checkBox4.Checked); + } } + else + { + XmlConfig.WriteXmlConfig("MyExplorer", "myexplorer", "delete_immediately", false); + XmlConfig.WriteXmlConfig("MyExplorer", "myexplorer", "delete_temp", false); + } } private void button2_Click(object sender, System.EventArgs e) @@ -363,7 +392,7 @@ { if (textBox1.Text == "") { - MessageBox.Show("Please select a temp path!"); + MessageBox.Show("Please select a temp path !"); } else { @@ -375,7 +404,7 @@ { if (checkBox2.Checked == true && checkBox3.Checked == false && checkBox4.Checked == false) { - MessageBox.Show("Please a Option: \n(Delete Files immediately)\n or \n(Delete moves files to Temp Folder)"); + MessageBox.Show("Please select an option : \n(Delete Files immediately)\n or \n(Delete moves files to Temp Folder)"); } else { Added: trunk/plugins/MyExplorer/XmlConfig.cs =================================================================== --- trunk/plugins/MyExplorer/XmlConfig.cs (rev 0) +++ trunk/plugins/MyExplorer/XmlConfig.cs 2008-05-19 17:30:00 UTC (rev 1796) @@ -0,0 +1,320 @@ +#region Banneer +/* + * Copyright (C) 2008 framug + * + * 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 + +#region HowToUse +/* + * Purpose of this class is to manage a xml config file. + * The generated file is MediaPortal xml config file compatible. + * It has been written in case of you have your own plugin save button or, you don't want + * to use MediaPortal.Configuration and MediaPortal.Profile in your plugin classes. + * ie : using (Settings ReadOrWriteXml = new Settings(Config.GetFile(Config.Dir.Config, PluginName()))) + * { ReadOrWriteXml = ... } + * + * How to use : + * - Add this class to your project. + * - Change namespace of this class with your own plugin name. + * + * - Call methods in your own plugin this way for writing : + * XmlConfig XmlConfig = new XmlConfig(); + * XmlConfig.WriteXmlConfig(StringFileName, StringSectionName, StringEntryName, StringValueName); + * XmlConfig.WriteXmlConfig(StringFileName, StringSectionName, StringEntryName, BoolValueName); + * XmlConfig.WriteXmlConfig(StringFileName, StringSectionName, StringEntryName, IntValueName); + * + * - Call methods in your own plugin this way for reading : + * XmlConfig XmlConfig = new XmlConfig(); + * YourString = XmlConfig.ReadXmlConfig(StringFileName, StringSectionName, StringEntryName, StringValueDefaultName); + * YourBool = XmlConfig.ReadXmlConfig(StringFileName, StringSectionName, StringEntryName, BoolValueDefaultName); + * YourInt = XmlConfig.ReadXmlConfig(StringFileName, StringSectionName, StringEntryName, IntValueDefaultName); + * + * - Call methods in your own plugin this way for removing entry : + * XmlConfig XmlConfig = new XmlConfig(); + * XmlConfig.RemoveEntry(StringFileName, StringSectionName, StringEntryName); + * + */ +#endregion + +#region using +using System; +using System.IO; // For I/O file +using System.Collections.Generic; +using System.Text; +using System.Xml; // For XmlDocument +using MediaPortal.Configuration; // For recover install MediaPortal path +#endregion + +namespace GUIExplorer +{ + class XmlConfig + { + +#region <<DECLARATION>> + XmlDocument configxml = new XmlDocument(); +#endregion + +#region <<public>> + + // Recover install MediaPortal path + public string PathInstalMP() + { + string path = Config.GetFolder(Config.Dir.Config); + return path; + } + + // Build entire filename of config file + public string EntireFilenameConfig(string FileName) + { + string entirefilename = PathInstalMP() + @"\" + FileName + ".xml"; + return entirefilename; + } + + // Called with bool type + public void WriteXmlConfig(string FileName, string Section, string Entry, bool Value) + { + string value = ""; + // Change true by "yes" and false by "no" for xml MediaPortal compatibility + if (Value) + { + value = "yes"; + } + else + { + value = "no"; + } + + WriteXmlConfig(FileName, Section, Entry, value); + } + + // Called with decimal type + public void WriteXmlConfig(string FileName, string Section, string Entry, decimal Value) + { + string value = Value.ToString(); + + WriteXmlConfig(FileName, Section, Entry, value); + } + + // Write a config file with XmlDocument + public void WriteXmlConfig(string FileName, string Section, string Entry, string Value) + { + // Create file if doesn't exist + if (!File.Exists(EntireFilenameConfig(FileName))) + { + CreateXmlConfig(FileName); + } + + //Open xml document + configxml.Load(EntireFilenameConfig(FileName)); + //Recover profile node + XmlElement profile = configxml.DocumentElement; + //Create section if doesn't exist + String XPath = @"/profile/section[@name='" + Section + "']"; + XmlNodeList ListSection = configxml.SelectNodes(XPath); + if (ListSection.Count < 1) + { + CreateSection(Section); + } + //Posit on section node + XmlNode section = profile.SelectSingleNode("section[@name='" + Section + "']"); + + //Create Entry if doesn't exist + XPath = @"/profile/section[@name='" + Section + "']/entry[@name='" + Entry + "']"; + XmlNodeList ListEntry = configxml.SelectNodes(XPath); + if (ListEntry.Count < 1) + { + CreateEntry(Section, Entry); + } + //Posit on entry node + XmlNode entry = section.SelectSingleNode("entry[@name='" + Entry + "']"); + + //Store entry value + entry.InnerText = Value; + + //Save xml config file + configxml.Save(EntireFilenameConfig(FileName)); + } + + // Remove an Entry + public void RemoveEntry(string FileName, string Section, string Entry) + { + // Return if xml file doesn't exist + if (!File.Exists(EntireFilenameConfig(FileName))) + { + return; + } + + //Open xml document + configxml.Load(EntireFilenameConfig(FileName)); + //Recover profile node + XmlElement profile = configxml.DocumentElement; + + //Posit on value + String XPath = @"/profile/section[@name='" + Section + "']/entry[@name='" + Entry + "']"; + XmlNodeList ListEntry = configxml.SelectNodes(XPath); + + // If value exist, remove it otherwise, return + if (ListEntry.Count > 0) + { + //Posit on section node + XmlNode section = profile.SelectSingleNode("section[@name='" + Section + "']"); + //Posit on entry node + XmlNode entry = section.SelectSingleNode("entry[@name='" + Entry + "']"); + //Remove the entry node for section + section.RemoveChild(entry); + //Save xml config file + configxml.Save(EntireFilenameConfig(FileName)); + } + return; + } + + // Called with bool type + public bool ReadXmlConfig(string FileName, string Section, string Entry, bool Value) + { + // Change true by "yes" and false by "no" for xml MediaPortal compatibility + string value = Value.ToString(); + if (Value) + { + value = "yes"; + } + else + { + value = "no"; + } + + string result = ReadXmlConfig(FileName, Section, Entry, value); + + // Change "yes" by true and "no" by false for xml MediaPortal compatibility + if (result == "yes") + { + Value = true; + } + else + { + Value = false; + } + + return Value; + } + + // Called with int type + public int ReadXmlConfig(string FileName, string Section, string Entry, int Value) + { + string value = Value.ToString(); + + string result = ReadXmlConfig(FileName, Section, Entry, value); + + Value = Convert.ToInt32(result); + + return Value; + } + + // Read xml config file with XmlDocument + public string ReadXmlConfig(string FileName, string Section, string Entry, string Value) + { + // Default value if xml file doesn't exist + if (!File.Exists(EntireFilenameConfig(FileName))) + { + return Value; + } + + //Open xml document + configxml.Load(EntireFilenameConfig(FileName)); + //Recover profile node + XmlElement profile = configxml.DocumentElement; + + //Posit on value + String XPath = @"/profile/section[@name='" + Section + "']/entry[@name='" + Entry + "']"; + XmlNodeList ListEntry = configxml.SelectNodes(XPath); + + // If value exist, return it otherwise, return default value + if (ListEntry.Count > 0) + { + //Posit on section node + XmlNode section = profile.SelectSingleNode("section[@name='" + Section + "']"); + //Posit on entry node + XmlNode entry = section.SelectSingleNode("entry[@name='" + Entry + "']"); + //Recover value with entry data + Value = entry.InnerText; + } + + return Value; + } + +#endregion + +#region <<private>> + + // Create xml config file with profile node + private void CreateXmlConfig(string FileName) + { + XmlDocument configxml = new XmlDocument(); + //Declaration of XML document type (utf-8, same as MediaPortal) + XmlDeclaration declaration = configxml.CreateXmlDeclaration("1.0", "utf-8", ""); + //Add declaration to document + configxml.AppendChild(declaration); + //Create profile node + XmlNode profile = configxml.CreateNode(System.Xml.XmlNodeType.Element, "profile", ""); + //Add node to document + configxml.AppendChild(profile); + + //Save xml config file + configxml.Save(EntireFilenameConfig(FileName)); + } + + // create section node + private void CreateSection(string Section) + { + //Recover profile node + XmlElement profile = configxml.DocumentElement; + //Create new section node + XmlNode section = configxml.CreateElement("section"); + //Add "name" attribute to section node + XmlAttribute name = configxml.CreateAttribute("name"); + //value is section name + name.Value = Section; + //Add value to section + section.Attributes.Append(name); + //Add section to document + profile.AppendChild(section); + } + + // create entry node + private void CreateEntry(string Section, string Entry) + { + //Recover profile node + XmlElement profile = configxml.DocumentElement; + //Posit on section node + XmlNode section = profile.SelectSingleNode("section[@name='" + Section + "']"); + //Create new node for entry + XmlNode entry = configxml.CreateElement("entry"); + //Add "name" attribute to entry node + XmlAttribute name = configxml.CreateAttribute("name"); + //value is entry name + name.Value = Entry; + //Add value to entry + entry.Attributes.Append(name); + //Add entry to document + section.AppendChild(entry); + } + +#endregion + + } // end of class +} // end of namespace Added: trunk/plugins/MyExplorer/skin/BlueTwo/Media/explorer_logo.png =================================================================== (Binary files differ) Property changes on: trunk/plugins/MyExplorer/skin/BlueTwo/Media/explorer_logo.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/plugins/MyExplorer/skin/BlueTwo/Media/hover_my explorer.png =================================================================== (Binary files differ) Property changes on: trunk/plugins/MyExplorer/skin/BlueTwo/Media/hover_my explorer.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/plugins/MyExplorer/skin/BlueTwo wide/Media/explorer_logo.png =================================================================== (Binary files differ) Property changes on: trunk/plugins/MyExplorer/skin/BlueTwo wide/Media/explorer_logo.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/plugins/MyExplorer/skin/BlueTwo wide/Media/hover_my explorer.png =================================================================== (Binary files differ) Property changes on: trunk/plugins/MyExplorer/skin/BlueTwo wide/Media/hover_my explorer.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fr...@us...> - 2008-05-26 05:13:26
|
Revision: 1812 http://mp-plugins.svn.sourceforge.net/mp-plugins/?rev=1812&view=rev Author: framug Date: 2008-05-25 22:13:24 -0700 (Sun, 25 May 2008) Log Message: ----------- - Localization (multi-language support) for configuration. - MP icon for SetupForm. - XMP for MPI Modified Paths: -------------- trunk/plugins/MyExplorer/My Explorer.csproj trunk/plugins/MyExplorer/SetupForm.cs trunk/plugins/MyExplorer/SetupForm.resx Added Paths: ----------- trunk/plugins/MyExplorer/Language/ trunk/plugins/MyExplorer/Language/strings_en.xml trunk/plugins/MyExplorer/Language/strings_fr.xml trunk/plugins/MyExplorer/LocalizeStrings.cs trunk/plugins/MyExplorer/My Explorer.xmp trunk/plugins/MyExplorer/config.ico Added: trunk/plugins/MyExplorer/Language/strings_en.xml =================================================================== --- trunk/plugins/MyExplorer/Language/strings_en.xml (rev 0) +++ trunk/plugins/MyExplorer/Language/strings_en.xml 2008-05-26 05:13:24 UTC (rev 1812) @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="utf-8"?> +<Language name="English" characters="255"> + <Section name="unmapped"> + <String id="0">My Explorer Configuration</String> + <String id="1">Show only Shares (Destination)</String> + <String id="2">Enable Delete Function</String> + <String id="3">Delete Files immediately</String> + <String id="4">Delete moves files to Temp Folder (like Trashcan)</String> + <String id="5">Temp Folder</String> + <String id="6">Select the folder where delete file will be stored</String> + <String id="7">Browse your files with MediaPortal</String> + <String id="8">Please select a temp path !</String> + <String id="9">Please select an option : </String> + <String id="10">(Delete Files immediately)</String> + <String id="11">or</String> + <String id="12">(Delete moves files to Temp Folder)</String> + <String id="13">My Explorer</String> + </Section> +</Language> \ No newline at end of file Added: trunk/plugins/MyExplorer/Language/strings_fr.xml =================================================================== --- trunk/plugins/MyExplorer/Language/strings_fr.xml (rev 0) +++ trunk/plugins/MyExplorer/Language/strings_fr.xml 2008-05-26 05:13:24 UTC (rev 1812) @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="utf-8"?> +<Language name="French" characters="255"> + <Section name="unmapped"> + <String id="0">Configuration du plugin Explorateur</String> + <String id="1">Montrer seulement les répertoires partagés (Destination)</String> + <String id="2">Activer la fonction de suppression</String> + <String id="3">Supprimer les fichiers immédiatement</String> + <String id="4">Supprimer les fichiers déplacés dans un répertoire temporaire (comme la corbeille)</String> + <String id="5">Répertoire temporaire</String> + <String id="6">Selectionnez le dossier où les fichiers supprimés seront stockés</String> + <String id="7">Parcourir vos fichiers avec MediaPortal</String> + <String id="8">Selectionnez un chemin pour votre répertoire temporaire !</String> + <String id="9">Selectionnez une option : </String> + <String id="10">(Supprimer les fichiers immédiatement)</String> + <String id="11">ou</String> + <String id="12">(Supprimer les fichiers déplacés dans le répertoire temporaire)</String> + <String id="13">Explorateur</String> + </Section> +</Language> \ No newline at end of file Added: trunk/plugins/MyExplorer/LocalizeStrings.cs =================================================================== --- trunk/plugins/MyExplorer/LocalizeStrings.cs (rev 0) +++ trunk/plugins/MyExplorer/LocalizeStrings.cs 2008-05-26 05:13:24 UTC (rev 1812) @@ -0,0 +1,351 @@ +#region Copyright (C) 2005-2007 Team MediaPortal + +/* + * Copyright (C) 2005-2007 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.IO; +using System.Globalization; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.Xml; +using MediaPortal.GUI; +using MediaPortal.GUI.Library; +using MediaPortal.Util; +using MediaPortal.Configuration; +using MediaPortal.Localisation; + +namespace GUIExplorer +{ + /// <summary> + /// Enumerations of all Configuration Messages + /// </summary> + public enum LocalizedMessages { + /// <summary> + /// SetupFormName + /// </summary> + SetupFormName = 0, + /// <summary> + /// Label1 + /// </summary> + Label1 = 1, + /// <summary> + /// Label2 + /// </summary> + Label2 = 2, + /// <summary> + /// Label3 + /// </summary> + Label3 = 3, + /// <summary> + /// Label4 + /// </summary> + Label4 = 4, + /// <summary> + /// Label5 (bad whisky, chivas is better blended) :-) + /// </summary> + Label5 = 5, + /// <summary> + /// FolderBrowseDial + /// </summary> + FolderBrowseDial = 6, + /// <summary> + /// Description + /// </summary> + Description = 7, + /// <summary> + /// MsgBox1 + /// </summary> + MsgBox1 = 8, + /// <summary> + /// MsgBox2 + /// </summary> + MsgBox2 = 9, + /// <summary> + /// MsgBox10 + /// </summary> + MsgBox3 = 10, + /// <summary> + /// MsgBox11 + /// </summary> + MsgBox4 = 11, + /// <summary> + /// MsgBox12 + /// </summary> + MsgBox5 = 12, + /// <summary> + /// PluginName + /// </summary> + PluginName = 13 +} + + /// <summary> + /// This class will hold all text used in the application + /// The text is loaded for the current language from + /// the file language/[language]/strings.xml + /// </summary> + public class LocalizeStrings + { + #region Variables + static LocalisationProvider _stringProvider; + static Dictionary<string, string> _cultures; + static string[] _languages; + #endregion + + #region Constructors/Destructors + /// <summary> + /// singleton. Dont allow any instance of this class + /// </summary> + private LocalizeStrings() + { + } + + /// <summary> + /// Dispose + /// </summary> + static public void Dispose() + { + if(_stringProvider != null) + _stringProvider.Dispose(); + } + #endregion + + #region Public Methods + /// <summary> + /// Public method to load the text from a strings/xml file into memory + /// </summary> + /// <param name="language">Language</param> + /// <returns> + /// true when text is loaded + /// false when it was unable to load the text + /// </returns> + //[Obsolete("This method has changed", true)] + static public bool Load(string language) + { + bool isPrefixEnabled = true; + + using (MediaPortal.Profile.Settings reader = new MediaPortal.Profile.Settings(MediaPortal.Configuration.Config.GetFile(MediaPortal.Configuration.Config.Dir.Config, "MediaPortal.xml"))) + isPrefixEnabled = reader.GetValueAsBool("general", "myprefix", true); + + string directory = MediaPortal.Configuration.Config.GetSubFolder(MediaPortal.Configuration.Config.Dir.Language, "My Explorer"); + string cultureName = null; + if (language != null) + cultureName = GetCultureName(language); + + Log.Info("My Explorer: Loading localised Strings - Path: {0} Culture: {1} Language: {2} Prefix: {3}", directory, cultureName, language, isPrefixEnabled); + + _stringProvider = new LocalisationProvider(directory, cultureName, isPrefixEnabled); + + return true; + } + + /// <summary> + /// Retrieves the current language + /// </summary> + /// <returns></returns> + static public string CurrentLanguage() + { + if (_stringProvider == null) + Load(null); + + return _stringProvider.CurrentLanguage.EnglishName; + } + + /// <summary> + /// Changes the current lagnuage + /// </summary> + /// <param name="language">New Language</param> + static public void ChangeLanguage(string language) + { + if (_stringProvider == null) + Load(language); + else + _stringProvider.ChangeLanguage(GetCultureName(language)); + } + + /// <summary> + /// Get the translation for a given id and format the sting with + /// the given parameters + /// </summary> + /// <param name="dwCode">id of text</param> + /// <param name="parameters">parameters used in the formating</param> + /// <returns> + /// string containing the translated text + /// </returns> + static public string Get(int dwCode, object[] parameters) + { + if (_stringProvider == null) + Load(null); + + string translation = _stringProvider.GetString("unmapped", dwCode); + // if parameters or the translation is null, return the translation. + if ((translation == null) || (parameters == null)) + { + return translation; + } + // return the formatted string. If formatting fails, log the error + // and return the unformatted string. + try + { + return String.Format(translation, parameters); + } + catch (System.FormatException e) + { + Log.Error("Error formatting translation with id {0}", dwCode); + Log.Error("Unformatted translation: {0}", translation); + Log.Error(e); + return translation; + } + } + + /// <summary> + /// Get the translation for a given id + /// </summary> + /// <param name="dwCode">id of text</param> + /// <returns> + /// string containing the translated text + /// </returns> + static public string Get(int dwCode) + { + if (_stringProvider == null) + Load(null); + + string translation = _stringProvider.GetString("unmapped", dwCode); + + if (translation == null) + { + Log.Error("No translation found for id {0}", dwCode); + return String.Empty; + } + + return translation; + } + + /// <summary> + /// Localize a label + /// </summary> + /// <param name="strLabel">Label</param> + static public void LocalizeLabel(ref string strLabel) + { + if (_stringProvider == null) + Load(null); + + if (strLabel == null) strLabel = String.Empty; + if (strLabel == "-") strLabel = ""; + if (strLabel == "") return; + // This can't be a valid string code if the first character isn't a number. + // This check will save us from catching unnecessary exceptions. + if (!char.IsNumber(strLabel, 0)) + return; + + int dwLabelID; + + try + { + dwLabelID = System.Int32.Parse(strLabel); + } + catch (FormatException e) + { + Log.Error(e); + strLabel = String.Empty; + return; + } + + strLabel = _stringProvider.GetString("unmapped", dwLabelID); + if (strLabel == null) + { + Log.Error("No translation found for id {0}", dwLabelID); + strLabel = String.Empty; + } + } + + /// <summary> + /// Retrieves if the local is supported + /// </summary> + /// <returns>Name of the supported local</returns> + public static string LocalSupported() + { + if (_stringProvider == null) + Load(null); + + CultureInfo culture = _stringProvider.GetBestLanguage(); + + return culture.EnglishName; + } + + /// <summary> + /// Retrieves an array with the supported languages + /// </summary> + /// <returns>Array with the supported languages</returns> + public static string[] SupportedLanguages() + { + if (_languages == null) + { + if (_stringProvider == null) + Load(null); + + CultureInfo[] cultures = _stringProvider.AvailableLanguages(); + + SortedList sortedLanguages = new SortedList(); + foreach (CultureInfo culture in cultures) + sortedLanguages.Add(culture.EnglishName, culture.EnglishName); + + _languages = new string[sortedLanguages.Count]; + + for (int i = 0; i < sortedLanguages.Count; i++) + { + _languages[i] = (string) sortedLanguages.GetByIndex(i); + } + } + + return _languages; + } + + /// <summary> + /// Retrieves the name of the culture + /// </summary> + /// <param name="language">Language</param> + /// <returns>Culture</returns> + static public string GetCultureName(string language) + { + if (_cultures == null) + { + _cultures = new Dictionary<string, string>(); + + CultureInfo[] cultureList = CultureInfo.GetCultures(CultureTypes.AllCultures); + + for (int i = 0; i < cultureList.Length; i++) + { + _cultures.Add(cultureList[i].EnglishName, cultureList[i].Name); + } + } + + if (_cultures.ContainsKey(language)) + return _cultures[language]; + + return null; + } + #endregion + } +} Modified: trunk/plugins/MyExplorer/My Explorer.csproj =================================================================== --- trunk/plugins/MyExplorer/My Explorer.csproj 2008-05-25 22:23:04 UTC (rev 1811) +++ trunk/plugins/MyExplorer/My Explorer.csproj 2008-05-26 05:13:24 UTC (rev 1812) @@ -51,6 +51,7 @@ </ItemGroup> <ItemGroup> <Compile Include="GUIExplorer.cs" /> + <Compile Include="LocalizeStrings.cs" /> <Compile Include="Properties\AssemblyInfo.cs" /> <Compile Include="SetupForm.cs"> <SubType>Form</SubType> @@ -63,6 +64,10 @@ <SubType>Designer</SubType> </EmbeddedResource> </ItemGroup> + <ItemGroup> + <Content Include="Language\strings_en.xml" /> + <Content Include="Language\strings_fr.xml" /> + </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. Added: trunk/plugins/MyExplorer/My Explorer.xmp =================================================================== --- trunk/plugins/MyExplorer/My Explorer.xmp (rev 0) +++ trunk/plugins/MyExplorer/My Explorer.xmp 2008-05-26 05:13:24 UTC (rev 1812) @@ -0,0 +1,117 @@ +<MPinstaler> + <ver>1.00.000</ver> + <FileList> + <File> + <FileName>explorer_logo.png</FileName> + <Type>Media</Type> + <SubType>BlueTwo wide</SubType> + <Source>skin\BlueTwo wide\Media\explorer_logo.png</Source> + <Id>02010</Id> + <Option>OutputFileName=\explorer_logo.png|</Option> + <Guid>2f990e27-ce1a-4fc4-8007-de26be55435e</Guid> + </File> + <File> + <FileName>explorer_logo.png</FileName> + <Type>Media</Type> + <SubType>BlueTwo</SubType> + <Source>skin\BlueTwo\Media\explorer_logo.png</Source> + <Id>02010</Id> + <Option>OutputFileName=\explorer_logo.png|</Option> + <Guid>2ee82883-967e-41fe-b0c5-c0ccd07b196c</Guid> + </File> + <File> + <FileName>hover_my explorer.png</FileName> + <Type>Media</Type> + <SubType>BlueTwo wide</SubType> + <Source>skin\BlueTwo wide\Media\hover_my explorer.png</Source> + <Id>02010</Id> + <Option>OutputFileName=\hover_my explorer.png|</Option> + <Guid>2490f7ea-6b38-4eca-b6ea-4a2a2385560d</Guid> + </File> + <File> + <FileName>hover_my explorer.png</FileName> + <Type>Media</Type> + <SubType>BlueTwo</SubType> + <Source>skin\BlueTwo\Media\hover_my explorer.png</Source> + <Id>02010</Id> + <Option>OutputFileName=\hover_my explorer.png|</Option> + <Guid>e8845fc3-a66f-47f4-852f-5d293713454a</Guid> + </File> + <File> + <FileName>My Explorer.dll</FileName> + <Type>Plugin</Type> + <SubType>Window</SubType> + <Source>bin\Release\My Explorer.dll</Source> + <Id>01010</Id> + <Option /> + <Guid>38814afe-d7ce-4a9a-ba39-82819b90e915</Guid> + </File> + <File> + <FileName>myexplorer.xml</FileName> + <Type>Skin</Type> + <SubType>BlueTwo wide</SubType> + <Source>skin\BlueTwo wide\myexplorer.xml</Source> + <Id>02010</Id> + <Option /> + <Guid>6175d752-5152-4f1c-a85b-05305efd15d3</Guid> + </File> + <File> + <FileName>myexplorer.xml</FileName> + <Type>Skin</Type> + <SubType>BlueTwo</SubType> + <Source>skin\BlueTwo\myexplorer.xml</Source> + <Id>02010</Id> + <Option /> + <Guid>554a07b9-52da-4934-a323-bbc04fae173d</Guid> + </File> + <File> + <FileName>strings_en.xml</FileName> + <Type>Other</Type> + <SubType>%Language%</SubType> + <Source>Language\strings_en.xml</Source> + <Id>02010</Id> + <Option>OutputFileName=\My Explorer\strings_en.xml|DefaultFile=False|</Option> + <Guid>82fcdbfe-1274-4866-861d-b135c7a24b64</Guid> + </File> + <File> + <FileName>strings_fr.xml</FileName> + <Type>Other</Type> + <SubType>%Language%</SubType> + <Source>Language\strings_fr.xml</Source> + <Id>02010</Id> + <Option>OutputFileName=\My Explorer\strings_fr.xml|DefaultFile=False|</Option> + <Guid>1e57f2d3-a3a0-4c63-9e6f-028baacbbcdf</Guid> + </File> + </FileList> + <StringList /> + <Actions /> + <SetupGroups /> + <SetupGroupMappings /> + <Option> + <BuildFileName /> + <ProiectFileName>D:\SVN\MP-Plugins\MyExplorer\My Explorer.xmp</ProiectFileName> + <ProiectName>My Explorer</ProiectName> + <Author>Gucky62</Author> + <UpdateURL>http://www.team-mediaportal.com</UpdateURL> + <Version>1.0</Version> + <Description>Browse your files with MediaPortal. + +V1.0 : +- Works with MP 1.0.0.0 RC1. +- Configuration parameters not saved each time. +- Multi-languages Configuration support.</Description> + <Group>Utilities</Group> + <Release>Stable </Release> + <Logo>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... [truncated message content] |