From 792732d7ef1ec4445f02e0b9c0b6eda6879db3a6 Mon Sep 17 00:00:00 2001
From: Kirill Volinsky <mataes2007@gmail.com>
Date: Mon, 29 Apr 2013 14:01:49 +0000
Subject: preparing for own info editing

git-svn-id: http://svn.miranda-ng.org/main/trunk@4569 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c
---
 protocols/Skype/res/Resource.rc       |  31 ++++--
 protocols/Skype/src/resource.h        |  22 +++--
 protocols/Skype/src/skype_dialogs.cpp | 179 +++++++++++++++++++---------------
 protocols/Skype/src/skype_profile.cpp |  37 -------
 protocols/Skype/src/skype_proto.h     |  12 +--
 5 files changed, 136 insertions(+), 145 deletions(-)

diff --git a/protocols/Skype/res/Resource.rc b/protocols/Skype/res/Resource.rc
index 2883f15109..7bcb2392a1 100644
--- a/protocols/Skype/res/Resource.rc
+++ b/protocols/Skype/res/Resource.rc
@@ -101,14 +101,29 @@ BEGIN
     EDITTEXT        IDC_LASTPROFILECHANGE,74,57,142,12,ES_AUTOHSCROLL | ES_READONLY | NOT WS_BORDER
 END
 
-IDD_OWNINFO_SKYPE DIALOGEX 0, 0, 222, 151
-STYLE DS_SETFONT | DS_3DLOOK | DS_FIXEDSYS | WS_CHILD
+IDD_OWNINFO_PERSONAL DIALOGEX 0, 0, 222, 132
+STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD
 EXSTYLE WS_EX_CONTROLPARENT
 FONT 8, "MS Shell Dlg", 0, 0, 0x1
 BEGIN
-    CONTROL         "",IDC_LIST,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_NOCOLUMNHEADER | WS_BORDER | WS_TABSTOP,2,2,218,133
-    PUSHBUTTON      "&Save changes",IDC_SAVE,140,137,80,13,WS_DISABLED
-    EDITTEXT        IDC_UPLOADING,2,138,127,12,ES_AUTOHSCROLL | ES_READONLY | NOT WS_VISIBLE | NOT WS_BORDER
+    LTEXT           "Full name:",IDC_STATIC,5,7,51,8
+    EDITTEXT        IDC_FULLNAME,58,5,159,12,ES_AUTOHSCROLL
+    LTEXT           "Date of birth:",IDC_STATIC,5,20,51,8
+    COMBOBOX        IDC_BIRTH_DAY,58,18,25,12,CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP
+    COMBOBOX        IDC_BIRTH_MONTH,84,18,25,12,CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP
+    COMBOBOX        IDC_BIRTH_YEAR,110,18,35,12,CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP
+    LTEXT           "Gender:",IDC_STATIC,5,34,51,8
+    COMBOBOX        IDC_GENDER,58,32,62,52,CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP
+    LTEXT           "Homepage:",IDC_STATIC,6,119,51,8
+    EDITTEXT        IDC_HOMEPAGE,58,117,159,12,ES_AUTOHSCROLL
+    LTEXT           "Language 1:",IDC_STATIC,6,47,51,8
+    COMBOBOX        IDC_LANGUAGE1,58,46,86,52,CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP
+    LTEXT           "Language 2:",IDC_STATIC,5,62,51,8
+    COMBOBOX        IDC_LANGUAGE2,58,60,85,52,CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP
+    LTEXT           "Language 3:",IDC_STATIC,5,76,51,8
+    COMBOBOX        IDC_LANGUAGE3,58,74,85,52,CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP
+    LTEXT           "About:",IDC_STATIC,5,90,51,8
+    EDITTEXT        IDC_ABOUT,57,88,159,24,ES_MULTILINE | WS_VSCROLL
 END
 
 IDD_PASSWORD_CHANGE DIALOGEX 0, 0, 201, 90
@@ -157,12 +172,8 @@ BEGIN
         HORZGUIDE, 74
     END
 
-    IDD_OWNINFO_SKYPE, DIALOG
+    IDD_OWNINFO_PERSONAL, DIALOG
     BEGIN
-        LEFTMARGIN, 2
-        RIGHTMARGIN, 220
-        TOPMARGIN, 2
-        BOTTOMMARGIN, 150
     END
 
     IDD_PASSWORD_CHANGE, DIALOG
diff --git a/protocols/Skype/src/resource.h b/protocols/Skype/src/resource.h
index 76d45d4b75..683064baaf 100644
--- a/protocols/Skype/src/resource.h
+++ b/protocols/Skype/src/resource.h
@@ -1,12 +1,14 @@
 //{{NO_DEPENDENCIES}}
 // Microsoft Visual C++ generated include file.
-// Used by e:\Projects\C++\MirandaNG\protocols\Skype\res\Resource.rc
+// Used by c:\Temp\Miranda NG\protocols\Skype\res\Resource.rc
 //
 #define IDD_ACCMGR                      9
 #define IDD_OPT_MAIN                    10
 #define IDD_INFO_SKYPE                  11
-#define IDD_OWNINFO_SKYPE               12
-#define IDD_PASSWORD_CHANGE             13
+#define IDD_OWNINFO_PERSONAL            12
+#define IDD_OWNINFO_HOME                13
+#define IDD_OWNINFO_CONTACT             14
+#define IDD_PASSWORD_CHANGE             15
 #define IDD_CHATROOM_INVITE             40
 #define IDI_ICON                        101
 #define IDR_RUNTIME                     102
@@ -33,9 +35,6 @@
 #define IDC_LASTEVENTDATE               1011
 #define IDC_PASSWORD3                   1011
 #define IDC_LASTPROFILECHANGE           1012
-#define IDC_SAVE                        1013
-#define IDC_LIST                        1014
-#define IDC_UPLOADING                   1015
 #define IDC_PORT                        1016
 #define IDC_USE_ALT_PORTS               1017
 #define IDC_REGISTER                    1018
@@ -45,6 +44,17 @@
 #define IDC_INSTRUCTION2                1022
 #define IDC_PASSWORD2                   1023
 #define IDC_INSTRUCTION3                1024
+#define IDC_FULLNAME                    1025
+#define IDC_BIRTH_DAY                   1026
+#define IDC_BIRTH_MONTH                 1027
+#define IDC_BIRTH_YEAR                  1028
+#define IDC_GENDER                      1029
+#define IDC_HOMEPAGE                    1030
+#define IDC_LANGUAGE1                   1031
+#define IDC_LANGUAGE2                   1032
+#define IDC_LANGUAGE3                   1033
+#define IDC_HOMEPAGE2                   1034
+#define IDC_ABOUT                       1034
 
 // Next default values for new objects
 // 
diff --git a/protocols/Skype/src/skype_dialogs.cpp b/protocols/Skype/src/skype_dialogs.cpp
index 6651480b88..1b7542f0bf 100644
--- a/protocols/Skype/src/skype_dialogs.cpp
+++ b/protocols/Skype/src/skype_dialogs.cpp
@@ -417,93 +417,110 @@ INT_PTR CALLBACK CSkypeProto::SkypeDlgProc(HWND hwndDlg, UINT msg, WPARAM wParam
 	return FALSE;
 }
 
-INT_PTR CALLBACK CSkypeProto::OwnSkypeDlgProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam)
+static INT_PTR CALLBACK PersonalSkypeDlgProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam)
 {
-	switch(msg) {
+	const unsigned long iPageId = 0;
+	CSkypeProto* ppro = (CSkypeProto*)GetWindowLongPtr(hwndDlg, GWLP_USERDATA);
+
+	switch (msg) {
 	case WM_INITDIALOG:
-		TranslateDialogDefault(hwndDlg);
+		if (lParam) {
+			ppro = (CSkypeProto*)lParam;
+			TranslateDialogDefault(hwndDlg);
+
+			SetWindowLongPtr(hwndDlg, GWLP_USERDATA, lParam);
+
+			SendMessage(GetDlgItem(hwndDlg, IDC_GENDER), CB_ADDSTRING, 0, (LPARAM)_T(""));
+			SendMessage(GetDlgItem(hwndDlg, IDC_GENDER), CB_ADDSTRING, 0, (LPARAM)TranslateT("Male"));
+			SendMessage(GetDlgItem(hwndDlg, IDC_GENDER), CB_ADDSTRING, 0, (LPARAM)TranslateT("Female"));
+			for (int i = 1; i < 32; i++)
+			{
+				TCHAR day[3];
+				_itot(i, day, 10);
+				SendMessage(GetDlgItem(hwndDlg, IDC_BIRTH_DAY), CB_ADDSTRING, 0, (LPARAM)day);
+			}
+			for (int i = 1; i < 13; i++)
+			{
+				TCHAR mon[3];
+				_itot(i, mon, 10);
+				SendMessage(GetDlgItem(hwndDlg, IDC_BIRTH_MONTH), CB_ADDSTRING, 0, (LPARAM)mon);
+			}
+			for (int i = 1900; i < 2214; i++)
+			{
+				TCHAR year[5];
+				_itot(i, year, 10);
+				SendMessage(GetDlgItem(hwndDlg, IDC_BIRTH_YEAR), CB_ADDSTRING, 0, (LPARAM)year);
+
+			}
+	
+			for (std::map<std::wstring, std::wstring>::iterator it = CSkypeProto::languages.begin(); it != CSkypeProto::languages.end(); ++it)
+			{
+				const wchar_t* value = it->second.c_str();
+				SendMessage(GetDlgItem(hwndDlg, IDC_LANGUAGE1), CB_ADDSTRING, 0, (LPARAM)value);
+				SendMessage(GetDlgItem(hwndDlg, IDC_LANGUAGE2), CB_ADDSTRING, 0, (LPARAM)value);
+				SendMessage(GetDlgItem(hwndDlg, IDC_LANGUAGE3), CB_ADDSTRING, 0, (LPARAM)value);
+			}
+			DBVARIANT dbv;
+			if ( !db_get_ts(NULL, ppro->m_szModuleName, "Nick", &dbv)) {
+				SetDlgItemText(hwndDlg, IDC_FULLNAME, dbv.ptszVal);
+				db_free(&dbv);
+			}
+			else
+				SetDlgItemText(hwndDlg, IDC_FULLNAME, _T(""));
+
+			if ( !db_get_ts(NULL, ppro->m_szModuleName, "Homepage", &dbv)) {
+				SetDlgItemText(hwndDlg, IDC_HOMEPAGE, dbv.ptszVal);
+				db_free(&dbv);
+			}
+			else
+				SetDlgItemText(hwndDlg, IDC_HOMEPAGE, _T(""));
+
+			if ( !db_get_ts(NULL, ppro->m_szModuleName, "About", &dbv)) {
+				SetDlgItemText(hwndDlg, IDC_ABOUT, dbv.ptszVal);
+				db_free(&dbv);
+			}
+			else
+				SetDlgItemText(hwndDlg, IDC_ABOUT, _T(""));
+
+			BYTE b = db_get_b(NULL, ppro->m_szModuleName, "Gender", 0);
+			if (b = 'M')
+				SetDlgItemText(hwndDlg, IDC_GENDER, TranslateT("Male"));
+			else if (b = 'F')
+				SetDlgItemText(hwndDlg, IDC_GENDER, TranslateT("Female"));
+			else
+				SetDlgItemText(hwndDlg, IDC_GENDER, _T(""));
+			BYTE bday = db_get_b(NULL, ppro->m_szModuleName, "BirthDay", 0);
+			if (bday > 1 && bday < 32)
+				SetDlgItemInt(hwndDlg, IDC_BIRTH_DAY, bday, false);
+			BYTE bmon = db_get_b(NULL, ppro->m_szModuleName, "BirthMonth", 0);
+			if (bmon > 1 && bmon < 13)
+				SetDlgItemInt(hwndDlg, IDC_BIRTH_MONTH, bmon, false);
+			WORD byear = db_get_w(NULL, ppro->m_szModuleName, "BirthYear", 0);
+			if (byear > 1900 && bmon < 2214)
+				SetDlgItemInt(hwndDlg, IDC_BIRTH_YEAR, byear, false);
+		}
+		break;
+
+	case WM_COMMAND:
+		if (((HWND)lParam==GetFocus() && HIWORD(wParam)==EN_CHANGE) ||
+			((HWND)lParam==GetDlgItem(hwndDlg, IDC_GENDER) && (HIWORD(wParam)==CBN_EDITCHANGE||HIWORD(wParam)==CBN_SELCHANGE)))
+		{
+			SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0);
+		}
 		break;
 
 	case WM_NOTIFY:
-		switch (((LPNMHDR)lParam)->idFrom) {
-		case 0:
+		if (((LPNMHDR)lParam)->idFrom == 0) {
 			switch (((LPNMHDR)lParam)->code) {
 			case PSN_PARAMCHANGED:
-				SetWindowLongPtr(hwndDlg, GWLP_USERDATA, ((PSHNOTIFY *)lParam)->lParam);
+				SendMessage(hwndDlg, WM_INITDIALOG, 0, ((PSHNOTIFY*)lParam)->lParam);
 				break;
-
-			case PSN_INFOCHANGED:
-				{
-					CSkypeProto *ppro = (CSkypeProto *)::GetWindowLongPtr(hwndDlg, GWLP_USERDATA);
-					if (!ppro)
-						break;
-
-					HWND hwndList = GetDlgItem(hwndDlg, IDC_LIST);
-					ListView_SetExtendedListViewStyle(hwndList, LVS_EX_FULLROWSELECT);
-					// Prepare ListView Columns
-					LV_COLUMN lvc = {0};
-					RECT rc;
-					GetClientRect(hwndList, &rc);
-					rc.right -= GetSystemMetrics(SM_CXVSCROLL);
-					lvc.mask = LVCF_WIDTH;
-					lvc.cx = rc.right / 3;
-					ListView_InsertColumn(hwndList, 0, &lvc);
-					lvc.cx = rc.right - lvc.cx;
-					ListView_InsertColumn(hwndList, 1, &lvc);
-					// Prepare Setting Items
-					LV_ITEM lvi = {0};
-					lvi.mask = LVIF_PARAM | LVIF_TEXT;
-
-					for (lvi.iItem = 0; lvi.iItem < SIZEOF(CSkypeProto::setting); lvi.iItem++)
-					{
-						lvi.lParam = lvi.iItem;
-						lvi.pszText = (LPTSTR)setting[lvi.iItem].szDescription;
-						ListView_InsertItem(hwndList, &lvi);
-						wchar_t *text = L"";
-						switch(setting[lvi.iItem].dbType) {
-							case DBVT_WCHAR:
-								text = ::db_get_wsa(NULL, ppro->m_szModuleName, setting[lvi.iItem].szDbSetting);
-								break;
-							case DBVT_BYTE:
-							{
-								if (!strcmp(setting[lvi.iItem].szDbSetting, "Gender")) {
-									switch(::db_get_b(NULL, ppro->m_szModuleName, setting[lvi.iItem].szDbSetting, 'M')) {
-									case 'M':
-										text = L"Male";
-										break;
-									case 'F':
-										text = L"Female";
-										break;
-									}
-								} else if (!strcmp(setting[lvi.iItem].szDbSetting, "Timezone")) {
-									HANDLE hTimeZone = tmi.createByContact ? tmi.createByContact(NULL, 0) : 0;
-									LPCTSTR TzDescr = tmi.getTzDescription(tmi.getTzName(hTimeZone));
-									text = mir_tstrdup(TzDescr);
-								} else {
-									wchar_t tmp[10];
-									_ltot(::db_get_b(NULL, ppro->m_szModuleName, setting[lvi.iItem].szDbSetting, 0), tmp, 10);
-									text = mir_tstrdup(tmp);
-								}
-								break;
-							}
-							case DBVT_WORD:
-							{
-								wchar_t tmp[10];
-								_ltot(::db_get_w(NULL, ppro->m_szModuleName, setting[lvi.iItem].szDbSetting, 0), tmp, 10);
-								text = mir_tstrdup(tmp);
-								//text = (wchar_t*)ppro->GetSettingWord(setting[lvi.iItem].szDbSetting);
-								break;
-							}
-						}
-						ListView_SetItemText(hwndList, lvi.iItem, 1, text);
-						if (setting[lvi.iItem].dbType == DBVT_WORD || (strcmp(setting[lvi.iItem].szDbSetting, "Gender") && setting[lvi.iItem].dbType == DBVT_BYTE))
-							mir_free(text);
-					}
-				}
+			case PSN_APPLY:
+				//ppro->SaveVcardToDB(hwndDlg, iPageId);
+				//if ( !ppro->m_vCardUpdates)
+				//	ppro->SetServerVcard(ppro->m_bPhotoChanged, ppro->m_szPhotoFileName);
 				break;
-			}
-			break;
-		}
+		}	}
 		break;
 	}
 	return FALSE;
@@ -516,7 +533,7 @@ int __cdecl CSkypeProto::OnUserInfoInit(WPARAM wParam, LPARAM lParam)
 
 	OPTIONSDIALOGPAGE odp = {0};
 	odp.cbSize = sizeof(odp);
-	odp.flags = ODPF_TCHAR | ODPF_DONTTRANSLATE;
+	odp.flags = ODPF_TCHAR | ODPF_USERINFOTAB | ODPF_DONTTRANSLATE;
 	odp.hInstance = g_hInstance;
 	odp.dwInitParam = LPARAM(this);
 	odp.position = -1900000000;
@@ -531,8 +548,8 @@ int __cdecl CSkypeProto::OnUserInfoInit(WPARAM wParam, LPARAM lParam)
 			UserInfo_AddPage(wParam, &odp);
 		}
 	} else {
-		odp.pfnDlgProc = OwnSkypeDlgProc;
-		odp.pszTemplate = MAKEINTRESOURCEA(IDD_OWNINFO_SKYPE);
+		odp.pfnDlgProc = PersonalSkypeDlgProc;
+		odp.pszTemplate = MAKEINTRESOURCEA(IDD_OWNINFO_PERSONAL);
 		UserInfo_AddPage(wParam, &odp);
 	}
 
diff --git a/protocols/Skype/src/skype_profile.cpp b/protocols/Skype/src/skype_profile.cpp
index fe2f5a1d3d..f8c747d49a 100644
--- a/protocols/Skype/src/skype_profile.cpp
+++ b/protocols/Skype/src/skype_profile.cpp
@@ -1,43 +1,6 @@
 #include "skype_proto.h"
 #include <sstream>
 
-#define LI_STRING        0
-#define LI_LIST          1
-#define LI_NUMBER        2
-
-SettingItem CSkypeProto::setting[] = {
-  {LPGENT("Nick"),			"Nick",			DBVT_WCHAR,	LI_STRING},
-  {LPGENT("First name"),	"FirstName",	DBVT_WCHAR,	LI_STRING},
-  {LPGENT("Last name"),		"LastName",		DBVT_WCHAR,	LI_STRING},
-  {LPGENT("Gender"),		"Gender",		DBVT_BYTE,	LI_LIST},
-
-  {LPGENT("Mood"),			"XStatusMsg",	DBVT_WCHAR,	LI_STRING},
-
-  {LPGENT("Mobile phone"),	"Cellular",		DBVT_WCHAR,	LI_NUMBER},
-  {LPGENT("Home phone"),	"Phone",		DBVT_WCHAR,	LI_NUMBER},
-  {LPGENT("Office phone"),	"CompanyPhone",	DBVT_WCHAR,	LI_NUMBER},
-
-  {LPGENT("E-mail 1"),		"e-mail0",		DBVT_WCHAR,	LI_STRING},
-  {LPGENT("E-mail 2"),		"e-mail1",		DBVT_WCHAR,	LI_STRING},
-  {LPGENT("E-mail 3"),		"e-mail2",		DBVT_WCHAR,	LI_STRING},
-
-  {LPGENT("Time zone"),		"Timezone",		DBVT_BYTE,	LI_LIST},
-  {LPGENT("Country"),		"Country",		DBVT_WCHAR,	LI_LIST},
-  {LPGENT("State"),			"State",		DBVT_WCHAR,	LI_STRING},
-  {LPGENT("City"),			"City",			DBVT_WCHAR,	LI_STRING},  
-
-  {LPGENT("Birth day"),		"BirthDay",		DBVT_BYTE,	LI_NUMBER},
-  {LPGENT("Birth month"),	"BirthMonth",	DBVT_BYTE,	LI_NUMBER},
-  {LPGENT("Birth year"),	"BirthYear",	DBVT_WORD,	LI_NUMBER},
-
-  {LPGENT("Language 1"),	"Language1",	DBVT_WCHAR,	LI_LIST},
-  {LPGENT("Language 2"),	"Language2",	DBVT_WCHAR,	LI_LIST},
-  {LPGENT("Language 3"),	"Language3",	DBVT_WCHAR,	LI_LIST},
-
-  {LPGENT("About"),			"About",		DBVT_WCHAR,	LI_STRING},
-  {LPGENT("Homepage"),		"Homepage",		DBVT_WCHAR,	LI_STRING}
-};
-
 void CSkypeProto::UpdateProfileAvatar(SEObject *obj, HANDLE hContact)
 {
 	uint newTS = hContact ? obj->GetUintProp(Contact::P_AVATAR_TIMESTAMP) : obj->GetUintProp(Account::P_AVATAR_TIMESTAMP);
diff --git a/protocols/Skype/src/skype_proto.h b/protocols/Skype/src/skype_proto.h
index ed9f407c0d..15d1b57b25 100644
--- a/protocols/Skype/src/skype_proto.h
+++ b/protocols/Skype/src/skype_proto.h
@@ -20,14 +20,6 @@ struct _tag_iconList
 	HANDLE		Handle;
 };
 
-struct SettingItem
-{
-  const TCHAR *szDescription;
-  const char *szDbSetting;
-  int dbType;              //DBVT_ constant
-  unsigned displayType;    //LI_ constant
-};
-
 struct HtmlEntity
 {
 	const char *entity;
@@ -187,6 +179,7 @@ public:
 	static int PrebuildContactMenu(WPARAM wParam, LPARAM lParam);
 
 	bool	IsOnline();
+	static std::map<std::wstring, std::wstring> languages;
 
 protected:
 	CAccount::Ref account;
@@ -312,11 +305,8 @@ protected:
 	void __cdecl SearchByEmailAsync(void*);
 
 	// profile
-	static std::map<std::wstring, std::wstring> languages;
 	static std::map<std::wstring, std::wstring> FillLanguages();
 
-	static SettingItem setting[23];
-
 	void	UpdateProfileAvatar(SEObject *obj, HANDLE hContact = NULL);
 	void	UpdateProfileAboutText(SEObject *obj, HANDLE hContact = NULL);
 	void	UpdateProfileBirthday(SEObject *obj, HANDLE hContact = NULL);
-- 
cgit v1.2.3