private { import std.string; import std.utf; import win32.windows; import entry; import inifile; import utils; import vector; } struct tab_action { char[] skin_name; uint position; uint open_wait; uint close_wait; uint transparency; uint open_type; bool lock; bool animation; int z_order; } class Config { private: static Config obj; this(){} public: tab_action common; char[] skin_path; char[] group_path; static Config GetInstance() { synchronized if (!obj) { obj = new Config; obj.LoadFromFile(GetCurDir() ~ "\\Moony.ini"); } return obj; } void LoadFromFile(char[] filename) { if (filename.length == 0) { filename = GetCurDir() ~ "\\Moony.ini"; } IniFile ini = new IniFile(filename); skin_path = ini.GetString("Path", "SkinPath", "skins"); group_path = ini.GetString("Path", "GroupPath", "groups"); common.skin_name = ini.GetString("TabCommon", "Skin", "default"); common.open_wait = ini.GetInteger("TabCommon", "OpenWait", 0); common.close_wait = ini.GetInteger("TabCommon", "CloseWait", 1000); common.transparency = ini.GetInteger("TabCommon", "Transparency", 255); common.open_type = ini.GetInteger("TabCommon", "OpenType", 0); common.position = ini.GetInteger("TabCommon", "RotatePos", 0); common.lock = ini.GetInteger("TabCommon", "Lock", 0) ? true : false; common.animation = ini.GetInteger("TabCommon", "Animation", 0) ? true : false; common.z_order = ini.GetInteger("TabCommon", "Z-Order", 0); } char[] GetSkinFullPath() { return GetCurDir() ~"\\"~ skin_path; } char[] GetGroupFullPath() { return GetCurDir() ~ "\\" ~ group_path; } } enum { Z_ORDER_NOCHANGE, Z_ORDER_MOUSEOVERONTOP, Z_ORDER_ALWAYSONTOP, } enum { OPENTYPE_AUTO, OPENTYPE_CLICK, OPENTYPE_CLICKOPENONLY, } struct tab_setting { HWND hParentWnd; Entry entry; int index; char[] name; char[] group_name; int x, y; bool override_action; bool removed; tab_action action; } alias Vector!(tab_setting) tab_settings; class TabSettings { private: static TabSettings obj; this() { settings = new tab_settings; } public: tab_settings settings; static TabSettings GetInstance() { synchronized if (!obj) { obj = new TabSettings; obj.LoadFromFile(GetCurDir() ~ "\\tabs.ini"); } return obj; } void LoadFromFile(char[] filename) { IniFile ini = new IniFile(filename); char[][] sections = ini.GetSectionNames(); for (int i = 0; i < sections.length; i++) { char[] section = sections[i]; // foreach (int i, char[] section; i++, sections) { tab_setting setting; // setting.section_name = section; setting.index = i; setting.name = ini.GetString(section, "Name", section); setting.group_name = ini.GetString(section, "Group", ""); setting.x = atoi(split(ini.GetString(section, "Position", "0,0"), ",")[0]); setting.y = atoi(split(ini.GetString(section, "Position", "0,0"), ",")[1]); setting.override_action = ini.GetInteger(section, "Override", 0) ? true : false; if (setting.override_action) { // 個別設定を使う setting.action.skin_name = ini.GetString(section, "Skin", "default"); setting.action.open_wait = ini.GetInteger(section, "OpenWait", 0); setting.action.close_wait = ini.GetInteger(section, "CloseWait", 1000); setting.action.transparency = ini.GetInteger(section, "Transparency", 255); setting.action.open_type = ini.GetInteger(section, "OpenType", 0); setting.action.position = ini.GetInteger(section, "RotatePos", 0); setting.action.lock = ini.GetInteger(section, "Lock", 0) ? true : false; setting.action.animation = ini.GetInteger(section, "Animation", 0) ? true : false; setting.action.z_order = ini.GetInteger(section, "Z-Order", 0); } else { // 共通設定を使う setting.action = Config.GetInstance().common; } settings.add(setting); } } void SaveToFile() { bool removed = false; char[] filename = GetCurDir() ~ "\\tabs.ini"; IniFile ini = new IniFile(filename); int count; // 削除チェック for (int i = 0; i < settings.size(); i++) { if (settings[i].removed) { std.file.remove(filename); removed = true; break; } } // 保存 for (int i = 0; i < settings.size(); i++) { if (!settings[i].removed) { tab_setting setting = settings[i]; char[] section = "TAB" ~ std.string.toString(count); ini.WriteString(section, "Name", setting.name); ini.WriteString(section, "Group", setting.group_name); ini.WriteString(section, "Position", std.string.toString(setting.x) ~ "," ~ std.string.toString(setting.y)); ini.WriteInteger(section, "Override", setting.override_action ? 1 : 0); if (setting.override_action) { ini.WriteString(section, "Skin", setting.action.skin_name); ini.WriteInteger(section, "OpenWait", setting.action.open_wait); ini.WriteInteger(section, "CloseWait", setting.action.close_wait); ini.WriteInteger(section, "Transparency", setting.action.transparency); ini.WriteInteger(section, "OpenType", setting.action.open_type); ini.WriteInteger(section, "RotatePos", setting.action.position); ini.WriteInteger(section, "Lock", setting.action.lock ? 1 : 0); ini.WriteInteger(section, "Animation", setting.action.animation ? 1 : 0); ini.WriteInteger(section, "Z-Order", setting.action.z_order); } count++; } } } void SaveSectionToFile(tab_setting setting) { char[] filename = GetCurDir() ~ "\\tabs.ini"; IniFile ini = new IniFile(filename); char[] section = "TAB" ~ std.string.toString(setting.index); ini.WriteString(section, "Name", setting.name); ini.WriteString(section, "Group", setting.group_name); ini.WriteString(section, "Position", std.string.toString(setting.x) ~ "," ~ std.string.toString(setting.y)); ini.WriteInteger(section, "Override", setting.override_action ? 1 : 0); if (setting.override_action) { ini.WriteString(section, "Skin", setting.action.skin_name); ini.WriteInteger(section, "CloseWait", setting.action.close_wait); ini.WriteInteger(section, "Transparency", setting.action.transparency); ini.WriteInteger(section, "Lock", setting.action.lock ? 1 : 0); ini.WriteInteger(section, "Animation", setting.action.animation ? 1 : 0); ini.WriteInteger(section, "Z-Order", setting.action.z_order); } } }