diff options
Diffstat (limited to 'bindings/csharp/Manager.cs')
-rw-r--r-- | bindings/csharp/Manager.cs | 162 |
1 files changed, 162 insertions, 0 deletions
diff --git a/bindings/csharp/Manager.cs b/bindings/csharp/Manager.cs new file mode 100644 index 0000000..85d9a83 --- /dev/null +++ b/bindings/csharp/Manager.cs @@ -0,0 +1,162 @@ +// Copyright 2014 CrossWire Bible Society (http://www.crosswire.org) +// CrossWire Bible Society +// P. O. Box 2528 +// Tempe, AZ 85280-2528 +// +// 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 version 2. +// +// 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. +using System; +using System.Collections.Generic; +using System.Runtime.InteropServices; + +namespace Sword +{ + public class Manager : IDisposable + { + IntPtr _handle; + + public Manager () + { + _handle = NativeMethods.org_crosswire_sword_SWMgr_new(); + } + + public Manager (string path) + { + _handle = NativeMethods.org_crosswire_sword_SWMgr_newWithPath(path); + } + + + internal IntPtr Handle + { + get + { + return _handle; + } + } + + protected void Dispose(bool disposing) + { + if(disposing) + { + if(_handle != IntPtr.Zero) + { + NativeMethods.org_crosswire_sword_SWMgr_delete(_handle); + _handle = IntPtr.Zero; + } + } + } + + public Module GetModuleByName(string name) + { + IntPtr modulePtr = NativeMethods.org_crosswire_sword_SWMgr_getModuleByName(_handle, name); + if(modulePtr == IntPtr.Zero) + { + return null; + } + return new Module(modulePtr); + } + + /// <summary> + /// Gets a list of the installed modules + /// </summary> + public IEnumerable<ModInfo> GetModInfoList() + { + IntPtr modulesPointer = NativeMethods.org_crosswire_sword_SWMgr_getModInfoList(_handle); + ModInfo modInfo = (ModInfo)Marshal.PtrToStructure(modulesPointer, typeof(ModInfo)); + + while (modInfo.Name != null) + { + yield return modInfo; + modulesPointer = new IntPtr(modulesPointer.ToInt64() + Marshal.SizeOf(typeof(ModInfo))); + modInfo = (ModInfo)Marshal.PtrToStructure(modulesPointer, typeof(ModInfo)); + } + } + + public string Version + { + get + { + IntPtr versionPtr = NativeMethods.org_crosswire_sword_SWMgr_version(_handle); + return Marshal.PtrToStringAnsi(versionPtr); + } + } + + public string PrefixPath + { + get + { + IntPtr prefixPathPtr = NativeMethods.org_crosswire_sword_SWMgr_getPrefixPath(_handle); + return Marshal.PtrToStringAnsi(prefixPathPtr); + } + } + + public string ConfigPath + { + get + { + IntPtr configPathPtr = NativeMethods.org_crosswire_sword_SWMgr_getConfigPath(_handle); + return Marshal.PtrToStringAnsi(configPathPtr); + } + } + + public void SetGlobalOption(string option, string @value) + { + NativeMethods.org_crosswire_sword_SWMgr_setGlobalOption(_handle, option, @value); + } + + public IEnumerable<string> GetGlobalOptionValues(string option) + { + IntPtr optionsPtr = NativeMethods.org_crosswire_sword_SWMgr_getGlobalOptionValues(_handle, option); + return NativeMethods.MarshalStringArray(optionsPtr); + } + + public void SetCipherKey(string modName, byte[] key) + { + NativeMethods.org_crosswire_sword_SWMgr_setCipherKey(_handle, modName, key); + } + + public bool Javascript + { + set + { + NativeMethods.org_crosswire_sword_SWMgr_setJavascript(_handle, value); + } + } + + public IEnumerable<string> AvailableLocales + { + get + { + IntPtr localesPtr = NativeMethods.org_crosswire_sword_SWMgr_getAvailableLocales(_handle); + return NativeMethods.MarshalStringArray(localesPtr); + } + } + + public string DefaultLocale + { + set + { + NativeMethods.org_crosswire_sword_SWMgr_setDefaultLocale(_handle, value); + } + } + + public string Translate(string text, string localeName) + { + IntPtr translatedPtr = NativeMethods.org_crosswire_sword_SWMgr_translate(_handle, text, localeName); + return Marshal.PtrToStringAnsi(translatedPtr); + } + + public void Dispose () + { + Dispose (true); + GC.Collect(); + } + } +} + |