keepass2android/src/KeePassLib2Android/Translation/KPTranslation.cs

255 lines
6.1 KiB
C#

/*
KeePass Password Safe - The Open-Source Password Manager
Copyright (C) 2003-2012 Dominik Reichl <dominik.reichl@t-online.de>
Modified to be used with Mono for Android. Changes Copyright (C) 2013 Philipp Crocoll
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 St, Fifth Floor, Boston, MA 02110-1301 USA
*/
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Xml;
using System.Xml.Serialization;
using System.ComponentModel;
using System.Drawing;
using System.Diagnostics;
using KeePassLib.Interfaces;
using KeePassLib.Utility;
#if !KeePassLibSD
using System.IO.Compression;
#else
using ICSharpCode.SharpZipLib.GZip;
#endif
namespace KeePassLib.Translation
{
[XmlRoot("Translation")]
public sealed class KPTranslation
{
public const string FileExtension = "lngx";
private KPTranslationProperties m_props = new KPTranslationProperties();
public KPTranslationProperties Properties
{
get { return m_props; }
set { m_props = value; }
}
private List<KPStringTable> m_vStringTables = new List<KPStringTable>();
[XmlArrayItem("StringTable")]
public List<KPStringTable> StringTables
{
get { return m_vStringTables; }
set
{
if(value == null) throw new ArgumentNullException("value");
m_vStringTables = value;
}
}
private List<KPFormCustomization> m_vForms = new List<KPFormCustomization>();
[XmlArrayItem("Form")]
public List<KPFormCustomization> Forms
{
get { return m_vForms; }
set
{
if(value == null) throw new ArgumentNullException("value");
m_vForms = value;
}
}
private string m_strUnusedText = string.Empty;
[DefaultValue("")]
public string UnusedText
{
get { return m_strUnusedText; }
set
{
if(value == null) throw new ArgumentNullException("value");
m_strUnusedText = value;
}
}
public static void SaveToFile(KPTranslation kpTrl, string strFileName,
IXmlSerializerEx xs)
{
if(xs == null) throw new ArgumentNullException("xs");
FileStream fs = new FileStream(strFileName, FileMode.Create,
FileAccess.Write, FileShare.None);
#if !KeePassLibSD
GZipStream gz = new GZipStream(fs, CompressionMode.Compress);
#else
GZipOutputStream gz = new GZipOutputStream(fs);
#endif
XmlWriterSettings xws = new XmlWriterSettings();
xws.CheckCharacters = true;
xws.Encoding = StrUtil.Utf8;
xws.Indent = true;
xws.IndentChars = "\t";
XmlWriter xw = XmlWriter.Create(gz, xws);
xs.Serialize(xw, kpTrl);
xw.Close();
gz.Close();
fs.Close();
}
public static KPTranslation LoadFromFile(string strFile,
IXmlSerializerEx xs)
{
if(xs == null) throw new ArgumentNullException("xs");
FileStream fs = new FileStream(strFile, FileMode.Open,
FileAccess.Read, FileShare.Read);
#if !KeePassLibSD
GZipStream gz = new GZipStream(fs, CompressionMode.Decompress);
#else
GZipInputStream gz = new GZipInputStream(fs);
#endif
KPTranslation kpTrl = (xs.Deserialize(gz) as KPTranslation);
gz.Close();
fs.Close();
return kpTrl;
}
public Dictionary<string, string> SafeGetStringTableDictionary(
string strTableName)
{
foreach(KPStringTable kpst in m_vStringTables)
{
if(kpst.Name == strTableName) return kpst.ToDictionary();
}
return new Dictionary<string, string>();
}
#if !KeePassLibSD
/*public void ApplyTo(Form form)
{
if(form == null) throw new ArgumentNullException("form");
if(m_props.RightToLeft)
{
try
{
form.RightToLeft = RightToLeft.Yes;
form.RightToLeftLayout = true;
}
catch(Exception) { Debug.Assert(false); }
}
string strTypeName = form.GetType().FullName;
foreach(KPFormCustomization kpfc in m_vForms)
{
if(kpfc.FullName == strTypeName)
{
kpfc.ApplyTo(form);
break;
}
}
if(m_props.RightToLeft)
{
try { RtlApplyToControls(form.Controls); }
catch(Exception) { Debug.Assert(false); }
}
}*/
/*
private static void RtlApplyToControls(Control.ControlCollection cc)
{
foreach(Control c in cc)
{
if(c.Controls.Count > 0) RtlApplyToControls(c.Controls);
if(c is DateTimePicker)
((DateTimePicker)c).RightToLeftLayout = true;
else if(c is ListView)
((ListView)c).RightToLeftLayout = true;
else if(c is MonthCalendar)
((MonthCalendar)c).RightToLeftLayout = true;
else if(c is ProgressBar)
((ProgressBar)c).RightToLeftLayout = true;
else if(c is TabControl)
((TabControl)c).RightToLeftLayout = true;
else if(c is TrackBar)
((TrackBar)c).RightToLeftLayout = true;
else if(c is TreeView)
((TreeView)c).RightToLeftLayout = true;
else if(c is ToolStrip)
RtlApplyToToolStripItems(((ToolStrip)c).Items);
if((c is GroupBox) || (c is Panel)) RtlMoveChildControls(c);
}
}*/
/*private static void RtlMoveChildControls(Control cParent)
{
int nParentWidth = cParent.Size.Width;
foreach(Control c in cParent.Controls)
{
Point ptCur = c.Location;
c.Location = new Point(nParentWidth - c.Size.Width - ptCur.X, ptCur.Y);
}
}
private static void RtlApplyToToolStripItems(ToolStripItemCollection tsic)
{
foreach(ToolStripItem tsi in tsic)
{
tsi.RightToLeftAutoMirrorImage = true;
}
}
public void ApplyTo(string strTableName, ToolStripItemCollection tsic)
{
if(tsic == null) throw new ArgumentNullException("tsic");
KPStringTable kpst = null;
foreach(KPStringTable kpstEnum in m_vStringTables)
{
if(kpstEnum.Name == strTableName)
{
kpst = kpstEnum;
break;
}
}
if(kpst != null) kpst.ApplyTo(tsic);
}*/
#endif
}
}