1 /* 2 Original code: http://farmanager.googlecode.com/svn/trunk/plugins/common/unicode/PluginSettings.hpp 3 License: derived from original one without extra restriction 4 */ 5 6 module pluginsettings; 7 8 import farplugin; 9 import wcharutil; 10 11 import std.traits; 12 import core.stdc.string; 13 import core.sys.windows.windows; 14 15 enum bool isIntegralType(T) = isBoolean!T || is(T == long) || is(T == ulong) || is(T == int) || is(T == uint); 16 17 class PluginSettings 18 { 19 private: 20 HANDLE handle; 21 FARAPISETTINGSCONTROL SettingsControl; 22 23 public: 24 25 this(ref const GUID guid, FARAPISETTINGSCONTROL SettingsControl) 26 { 27 this.SettingsControl = SettingsControl; 28 handle = INVALID_HANDLE_VALUE; 29 30 FarSettingsCreate settings={FarSettingsCreate.sizeof, guid, handle}; 31 if (SettingsControl(INVALID_HANDLE_VALUE,FAR_SETTINGS_CONTROL_COMMANDS.SCTL_CREATE,0,&settings)) 32 handle = settings.Handle; 33 } 34 35 ~this() 36 { 37 SettingsControl(handle,FAR_SETTINGS_CONTROL_COMMANDS.SCTL_FREE,0,null); 38 } 39 40 auto CreateSubKey(size_t Root, wstring Name) 41 { 42 FarSettingsValue value={FarSettingsValue.sizeof,Root,Name.toWStringz}; 43 return SettingsControl(handle,FAR_SETTINGS_CONTROL_COMMANDS.SCTL_CREATESUBKEY,0,&value); 44 } 45 46 auto OpenSubKey(size_t Root, wstring Name) 47 { 48 FarSettingsValue value={FarSettingsValue.sizeof,Root,Name.toWStringz}; 49 return SettingsControl(handle,FAR_SETTINGS_CONTROL_COMMANDS.SCTL_OPENSUBKEY,0,&value); 50 } 51 52 bool DeleteSubKey(size_t Root) 53 { 54 FarSettingsValue value={FarSettingsValue.sizeof,Root,null}; 55 return SettingsControl(handle,FAR_SETTINGS_CONTROL_COMMANDS.SCTL_DELETE,0,&value) ? true : false; 56 } 57 58 bool DeleteValue(size_t Root, wstring Name) 59 { 60 FarSettingsValue value={FarSettingsValue.sizeof,Root,Name.toWStringz}; 61 return SettingsControl(handle,FAR_SETTINGS_CONTROL_COMMANDS.SCTL_DELETE,0,&value) ? true : false; 62 } 63 64 wchar[] Get(size_t Root, wstring Name, wchar[] Default) 65 { 66 FarSettingsItem item={FarSettingsItem.sizeof,Root,Name.toWStringz,FARSETTINGSTYPES.FST_STRING}; 67 if (SettingsControl(handle,FAR_SETTINGS_CONTROL_COMMANDS.SCTL_GET,0,&item)) 68 { 69 return item.String.toWString; 70 } 71 return Default; 72 } 73 74 void Get(size_t Root, wstring Name, wchar[] Value, wchar[] Default) 75 { 76 Get(Root, Name, Value.ptr, Value.length, Default); 77 } 78 79 void Get(size_t Root, wstring Name, wchar* Value, size_t Size, wchar[] Default) 80 { 81 lstrcpynW(Value, Get(Root,Name,Default).toWStringz, cast(int)Size); 82 } 83 84 T Get(T)(size_t Root, wstring Name, T Default) 85 if (isIntegralType!T) 86 { 87 FarSettingsItem item={FarSettingsItem.sizeof,Root,Name.toWStringz,FARSETTINGSTYPES.FST_QWORD}; 88 if (SettingsControl(handle,FAR_SETTINGS_CONTROL_COMMANDS.SCTL_GET,0,&item)) 89 { 90 return cast(T)item.Number; 91 } 92 return Default; 93 } 94 95 size_t Get(size_t Root, wstring Name, void[] Value) 96 { 97 return Get(Root, Name, Value.ptr, Value.length); 98 } 99 100 size_t Get(size_t Root, wstring Name, void* Value, size_t Size) 101 { 102 FarSettingsItem item={FarSettingsItem.sizeof,Root,Name.toWStringz,FARSETTINGSTYPES.FST_DATA}; 103 if (SettingsControl(handle,FAR_SETTINGS_CONTROL_COMMANDS.SCTL_GET,0,&item)) 104 { 105 Size = (item.Data.Size>Size)?Size:item.Data.Size; 106 memcpy(Value,item.Data.Data,Size); 107 return Size; 108 } 109 return 0; 110 } 111 112 bool Set(size_t Root, wstring Name, in wchar[] Value) 113 { 114 return Set(Root, Name, Value.toWStringz); 115 } 116 117 bool Set(size_t Root, wstring Name, in wchar* Value) 118 { 119 FarSettingsItem item={FarSettingsItem.sizeof,Root,Name.toWStringz,FARSETTINGSTYPES.FST_STRING}; 120 item.String=Value; 121 return SettingsControl(handle,FAR_SETTINGS_CONTROL_COMMANDS.SCTL_SET,0,&item)!=FALSE; 122 } 123 124 bool Set(T)(size_t Root, wstring Name, T Value) 125 if (isIntegralType!T) 126 { 127 FarSettingsItem item={FarSettingsItem.sizeof,Root,Name.toWStringz,FARSETTINGSTYPES.FST_QWORD}; 128 item.Number=Value; 129 return SettingsControl(handle,FAR_SETTINGS_CONTROL_COMMANDS.SCTL_SET,0,&item)!=FALSE; 130 } 131 132 bool Set(size_t Root, wstring Name, in void[] Value) 133 { 134 return Set(Root, Name, Value.ptr, Value.length); 135 } 136 137 bool Set(size_t Root, wstring Name, in void* Value, size_t Size) 138 { 139 FarSettingsItem item={FarSettingsItem.sizeof,Root,Name.toWStringz,FARSETTINGSTYPES.FST_DATA}; 140 item.Data.Size=Size; 141 item.Data.Data=Value; 142 return SettingsControl(handle,FAR_SETTINGS_CONTROL_COMMANDS.SCTL_SET,0,&item)!=FALSE; 143 } 144 }