summaryrefslogtreecommitdiff
path: root/plugins/DbEditorPP/src/modules.cpp
blob: 2e650b2fe495afa12ca2c616a04a739c2846576e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
#include "headers.h"


void renameModule(char* oldName, char* newName, HANDLE hContact)
{
	DBVARIANT dbv;
	ModuleSettingLL settinglist;
	struct ModSetLinkLinkItem *setting;

	if (!EnumSettings(hContact,oldName,&settinglist)) { msg(Translate("Error Loading Setting List"),modFullname); return;}

	setting = settinglist.first;
	while (setting)
	{
		if (!GetSetting(hContact,oldName,setting->name,&dbv))
		{
			switch (dbv.type)
			{
				case DBVT_BYTE:
					DBWriteContactSettingByte(hContact, newName, setting->name, dbv.bVal);
				break;
				case DBVT_WORD:
					DBWriteContactSettingWord(hContact, newName, setting->name, dbv.wVal);
				break;
				case DBVT_DWORD:
					DBWriteContactSettingDword(hContact, newName, setting->name, dbv.dVal);
				break;
				case DBVT_ASCIIZ:
					DBWriteContactSettingString(hContact, newName, setting->name, dbv.pszVal);
				break;
				case DBVT_UTF8:
					DBWriteContactSettingStringUtf(hContact, newName, setting->name, dbv.pszVal);
				break;
				case DBVT_BLOB:
					DBWriteContactSettingBlob(hContact, newName, setting->name, dbv.pbVal, dbv.cpbVal);
				break;

			}
			DBDeleteContactSetting(hContact, oldName, setting->name);
		}
		DBFreeVariant(&dbv);
		setting = (struct ModSetLinkLinkItem *)setting->next;
	}
	FreeModuleSettingLL(&settinglist);
}

INT_PTR CALLBACK AddModDlgProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
	if (msg == WM_INITDIALOG)
	{
		SetWindowLongPtr(hwnd,GWLP_USERDATA,lParam);
		TranslateDialogDefault(hwnd);
	}
	if (msg == WM_COMMAND)
	{
		switch(LOWORD(wParam))
		{
			case IDOK:
			{
				if (GetWindowTextLength(GetDlgItem(hwnd, IDC_MODNAME)))
				{
					char modulename[256];
					GetDlgItemText(hwnd, IDC_MODNAME, modulename, 256);
					if (IsDlgButtonChecked(hwnd,CHK_ADD2ALL))
					{
						HANDLE hContact = db_find_first();
						// null contact
						DBWriteContactSettingByte(NULL, modulename, "(Default)", 0);
						while (hContact)
						{
							DBWriteContactSettingByte(hContact, modulename, "(Default)", 0);
							hContact = db_find_next(hContact);
						}
					}
					else
					{
						DBWriteContactSettingByte((HANDLE)GetWindowLongPtr(hwnd,GWLP_USERDATA), modulename, "(Default)", 0);
					}
					refreshTree(1);
				}
			}
			// fall through
			case IDCANCEL:
				DestroyWindow(hwnd);
			break;
		}
	}
	return 0;
}

int CloneContact(HANDLE hContact)
{
	HANDLE newContact = (HANDLE)CallService(MS_DB_CONTACT_ADD,0,0);

	ModuleSettingLL modlist;
	struct ModSetLinkLinkItem *mod;
	if (!newContact) return 0;
	// enum all the modules
	if (!EnumModules(&modlist)) { msg(Translate("Error Loading Module List"),modFullname); return 0;}

	mod = modlist.first;
	while (mod)
	{
		copyModule(mod->name,hContact,newContact);
		mod = (struct ModSetLinkLinkItem *)mod->next;
	}
	FreeModuleSettingLL(&modlist);
	return 1;
}