summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/modules/clist/Docking.cpp16
-rw-r--r--src/modules/clist/contacts.cpp395
-rw-r--r--src/modules/clist/genmenu.cpp51
-rw-r--r--src/modules/clist/genmenu.h4
-rw-r--r--src/modules/clist/genmenuopt.cpp1185
-rw-r--r--src/modules/clist/keyboard.cpp63
-rw-r--r--src/modules/clist/protocolorder.cpp410
-rw-r--r--src/resource.rc2
8 files changed, 982 insertions, 1144 deletions
diff --git a/src/modules/clist/Docking.cpp b/src/modules/clist/Docking.cpp
index 3ebda96ee4..7d9fbd62c6 100644
--- a/src/modules/clist/Docking.cpp
+++ b/src/modules/clist/Docking.cpp
@@ -109,10 +109,8 @@ static void Docking_AdjustPosition(HWND hwnd, LPRECT rcDisplay, LPRECT rc, bool
dockPos = *(LPPOINT)rc;
}
- if (move) {
- MoveWindow(hwnd, rc->left, rc->top, rc->right - rc->left,
- rc->bottom - rc->top, TRUE);
- }
+ if (move)
+ MoveWindow(hwnd, rc->left, rc->top, rc->right - rc->left, rc->bottom - rc->top, TRUE);
}
static void Docking_SetSize(HWND hwnd, LPRECT rc, bool query, bool move)
@@ -319,17 +317,17 @@ int fnDocking_ProcessWindowMessage(WPARAM wParam, LPARAM lParam)
POINT pt;
GetClientRect(msg->hwnd, &rc);
if ((docked == DOCKED_LEFT && (short)LOWORD(msg->lParam) > rc.right) ||
- (docked == DOCKED_RIGHT && (short)LOWORD(msg->lParam) < 0)) {
+ (docked == DOCKED_RIGHT && (short)LOWORD(msg->lParam) < 0)) {
ReleaseCapture();
draggingTitle = 0;
docked = 0;
GetCursorPos(&pt);
PostMessage(msg->hwnd, WM_NCLBUTTONDOWN, HTCAPTION, MAKELPARAM(pt.x, pt.y));
SetWindowPos(msg->hwnd, 0, pt.x - rc.right / 2,
- pt.y - GetSystemMetrics(SM_CYFRAME) - GetSystemMetrics(SM_CYSMCAPTION) / 2,
- db_get_dw(NULL, "CList", "Width", 0),
- db_get_dw(NULL, "CList", "Height", 0),
- SWP_NOZORDER);
+ pt.y - GetSystemMetrics(SM_CYFRAME) - GetSystemMetrics(SM_CYSMCAPTION) / 2,
+ db_get_dw(NULL, "CList", "Width", 0),
+ db_get_dw(NULL, "CList", "Height", 0),
+ SWP_NOZORDER);
Docking_Command(msg->hwnd, ABM_REMOVE);
}
return 1;
diff --git a/src/modules/clist/contacts.cpp b/src/modules/clist/contacts.cpp
index 711d69dbc5..d370239c84 100644
--- a/src/modules/clist/contacts.cpp
+++ b/src/modules/clist/contacts.cpp
@@ -95,46 +95,47 @@ static int ProcessDatabaseValueDefault(CONTACTINFO *ci, const char* setting)
return 1;
}
-static INT_PTR GetContactInfo(WPARAM, LPARAM lParam) {
+static INT_PTR GetContactInfo(WPARAM, LPARAM lParam)
+{
DBVARIANT dbv;
CONTACTINFO *ci = (CONTACTINFO*)lParam;
-
if (ci == NULL) return 1;
if (ci->szProto == NULL) ci->szProto = (char*)CallService(MS_PROTO_GETCONTACTBASEACCOUNT, (WPARAM)ci->hContact, 0);
if (ci->szProto == NULL) return 1;
+
ci->type = 0;
- switch(ci->dwFlag & 0x7F) {
- case CNF_FIRSTNAME: return ProcessDatabaseValueDefault(ci, "FirstName");
- case CNF_LASTNAME: return ProcessDatabaseValueDefault(ci, "LastName");
- case CNF_NICK: return ProcessDatabaseValueDefault(ci, "Nick");
- case CNF_EMAIL: return ProcessDatabaseValueDefault(ci, "e-mail");
- case CNF_CITY: return ProcessDatabaseValueDefault(ci, "City");
- case CNF_STATE: return ProcessDatabaseValueDefault(ci, "State");
- case CNF_PHONE: return ProcessDatabaseValueDefault(ci, "Phone");
- case CNF_HOMEPAGE: return ProcessDatabaseValueDefault(ci, "Homepage");
- case CNF_ABOUT: return ProcessDatabaseValueDefault(ci, "About");
- case CNF_AGE: return ProcessDatabaseValueDefault(ci, "Age");
- case CNF_GENDER: return ProcessDatabaseValueDefault(ci, "Gender");
- case CNF_FAX: return ProcessDatabaseValueDefault(ci, "Fax");
- case CNF_CELLULAR: return ProcessDatabaseValueDefault(ci, "Cellular");
- case CNF_BIRTHDAY: return ProcessDatabaseValueDefault(ci, "BirthDay");
- case CNF_BIRTHMONTH: return ProcessDatabaseValueDefault(ci, "BirthMonth");
- case CNF_BIRTHYEAR: return ProcessDatabaseValueDefault(ci, "BirthYear");
- case CNF_STREET: return ProcessDatabaseValueDefault(ci, "Street");
- case CNF_ZIP: return ProcessDatabaseValueDefault(ci, "ZIP");
- case CNF_LANGUAGE1: return ProcessDatabaseValueDefault(ci, "Language1");
- case CNF_LANGUAGE2: return ProcessDatabaseValueDefault(ci, "Language2");
- case CNF_LANGUAGE3: return ProcessDatabaseValueDefault(ci, "Language3");
- case CNF_CONAME: return ProcessDatabaseValueDefault(ci, "Company");
- case CNF_CODEPT: return ProcessDatabaseValueDefault(ci, "CompanyDepartment");
- case CNF_COPOSITION: return ProcessDatabaseValueDefault(ci, "CompanyPosition");
- case CNF_COSTREET: return ProcessDatabaseValueDefault(ci, "CompanyStreet");
- case CNF_COCITY: return ProcessDatabaseValueDefault(ci, "CompanyCity");
- case CNF_COSTATE: return ProcessDatabaseValueDefault(ci, "CompanyState");
- case CNF_COZIP: return ProcessDatabaseValueDefault(ci, "CompanyZIP");
- case CNF_COHOMEPAGE: return ProcessDatabaseValueDefault(ci, "CompanyHomepage");
-
- case CNF_CUSTOMNICK:
+ switch (ci->dwFlag & 0x7F) {
+ case CNF_FIRSTNAME: return ProcessDatabaseValueDefault(ci, "FirstName");
+ case CNF_LASTNAME: return ProcessDatabaseValueDefault(ci, "LastName");
+ case CNF_NICK: return ProcessDatabaseValueDefault(ci, "Nick");
+ case CNF_EMAIL: return ProcessDatabaseValueDefault(ci, "e-mail");
+ case CNF_CITY: return ProcessDatabaseValueDefault(ci, "City");
+ case CNF_STATE: return ProcessDatabaseValueDefault(ci, "State");
+ case CNF_PHONE: return ProcessDatabaseValueDefault(ci, "Phone");
+ case CNF_HOMEPAGE: return ProcessDatabaseValueDefault(ci, "Homepage");
+ case CNF_ABOUT: return ProcessDatabaseValueDefault(ci, "About");
+ case CNF_AGE: return ProcessDatabaseValueDefault(ci, "Age");
+ case CNF_GENDER: return ProcessDatabaseValueDefault(ci, "Gender");
+ case CNF_FAX: return ProcessDatabaseValueDefault(ci, "Fax");
+ case CNF_CELLULAR: return ProcessDatabaseValueDefault(ci, "Cellular");
+ case CNF_BIRTHDAY: return ProcessDatabaseValueDefault(ci, "BirthDay");
+ case CNF_BIRTHMONTH: return ProcessDatabaseValueDefault(ci, "BirthMonth");
+ case CNF_BIRTHYEAR: return ProcessDatabaseValueDefault(ci, "BirthYear");
+ case CNF_STREET: return ProcessDatabaseValueDefault(ci, "Street");
+ case CNF_ZIP: return ProcessDatabaseValueDefault(ci, "ZIP");
+ case CNF_LANGUAGE1: return ProcessDatabaseValueDefault(ci, "Language1");
+ case CNF_LANGUAGE2: return ProcessDatabaseValueDefault(ci, "Language2");
+ case CNF_LANGUAGE3: return ProcessDatabaseValueDefault(ci, "Language3");
+ case CNF_CONAME: return ProcessDatabaseValueDefault(ci, "Company");
+ case CNF_CODEPT: return ProcessDatabaseValueDefault(ci, "CompanyDepartment");
+ case CNF_COPOSITION: return ProcessDatabaseValueDefault(ci, "CompanyPosition");
+ case CNF_COSTREET: return ProcessDatabaseValueDefault(ci, "CompanyStreet");
+ case CNF_COCITY: return ProcessDatabaseValueDefault(ci, "CompanyCity");
+ case CNF_COSTATE: return ProcessDatabaseValueDefault(ci, "CompanyState");
+ case CNF_COZIP: return ProcessDatabaseValueDefault(ci, "CompanyZIP");
+ case CNF_COHOMEPAGE: return ProcessDatabaseValueDefault(ci, "CompanyHomepage");
+
+ case CNF_CUSTOMNICK:
{
char* saveProto = ci->szProto; ci->szProto = "CList";
if (ci->hContact != NULL && !ProcessDatabaseValueDefault(ci, "MyHandle")) {
@@ -142,68 +143,69 @@ static INT_PTR GetContactInfo(WPARAM, LPARAM lParam) {
return 0;
}
ci->szProto = saveProto;
- break;
}
- case CNF_COUNTRY:
- case CNF_COCOUNTRY:
- if (!GetDatabaseString(ci, (ci->dwFlag & 0x7F) == CNF_COUNTRY ? "CountryName" : "CompanyCountryName", &dbv))
- return 0;
+ break;
- if (!db_get(ci->hContact, ci->szProto, (ci->dwFlag & 0x7F) == CNF_COUNTRY ? "Country" : "CompanyCountry", &dbv)) {
- if (dbv.type == DBVT_WORD) {
- int i, countryCount;
- struct CountryListEntry *countries;
- CallService(MS_UTILS_GETCOUNTRYLIST, (WPARAM)&countryCount, (LPARAM)&countries);
- for (i=0;i<countryCount;i++) {
- if (countries[i].id != dbv.wVal) continue;
+ case CNF_COUNTRY:
+ case CNF_COCOUNTRY:
+ if (!GetDatabaseString(ci, (ci->dwFlag & 0x7F) == CNF_COUNTRY ? "CountryName" : "CompanyCountryName", &dbv))
+ return 0;
- if (ci->dwFlag & CNF_UNICODE) {
- int cbLen = MultiByteToWideChar(CP_ACP, 0, (LPCSTR)countries[i].szName, -1, NULL, 0);
- WCHAR* buf = (WCHAR*)mir_alloc(sizeof(WCHAR)*(cbLen+1));
- if (buf != NULL)
- MultiByteToWideChar(CP_ACP, 0, (LPCSTR)countries[i].szName, -1, buf, cbLen);
- ci->pszVal = (TCHAR*)buf;
- }
- else ci->pszVal = (TCHAR*)mir_strdup(countries[i].szName);
+ if (!db_get(ci->hContact, ci->szProto, (ci->dwFlag & 0x7F) == CNF_COUNTRY ? "Country" : "CompanyCountry", &dbv)) {
+ if (dbv.type == DBVT_WORD) {
+ int i, countryCount;
+ struct CountryListEntry *countries;
+ CallService(MS_UTILS_GETCOUNTRYLIST, (WPARAM)&countryCount, (LPARAM)&countries);
+ for (i = 0; i < countryCount; i++) {
+ if (countries[i].id != dbv.wVal) continue;
- ci->type = CNFT_ASCIIZ;
- db_free(&dbv);
- return 0;
- }
- }
- else return ProcessDatabaseValueDefault(ci, (ci->dwFlag & 0x7F) == CNF_COUNTRY ? "Country" : "CompanyCountry");
- db_free(&dbv);
- }
- break;
-
- case CNF_FIRSTLAST:
- if (!GetDatabaseString(ci, "FirstName", &dbv)) {
- DBVARIANT dbv2;
- if (!GetDatabaseString(ci, "LastName", &dbv2)) {
- ci->type = CNFT_ASCIIZ;
if (ci->dwFlag & CNF_UNICODE) {
- size_t len = wcslen(dbv.pwszVal) + wcslen(dbv2.pwszVal) + 2;
- WCHAR* buf = (WCHAR*)mir_alloc(sizeof(WCHAR)*len);
+ int cbLen = MultiByteToWideChar(CP_ACP, 0, (LPCSTR)countries[i].szName, -1, NULL, 0);
+ WCHAR* buf = (WCHAR*)mir_alloc(sizeof(WCHAR)*(cbLen + 1));
if (buf != NULL)
- wcscat(wcscat(wcscpy(buf, dbv.pwszVal), L" "), dbv2.pwszVal);
- ci->pszVal = (TCHAR*)buf;
- }
- else {
- size_t len = strlen(dbv.pszVal) + strlen(dbv2.pszVal) + 2;
- char* buf = (char*)mir_alloc(len);
- if (buf != NULL)
- strcat(strcat(strcpy(buf, dbv.pszVal), " "), dbv2.pszVal);
+ MultiByteToWideChar(CP_ACP, 0, (LPCSTR)countries[i].szName, -1, buf, cbLen);
ci->pszVal = (TCHAR*)buf;
}
+ else ci->pszVal = (TCHAR*)mir_strdup(countries[i].szName);
+
+ ci->type = CNFT_ASCIIZ;
db_free(&dbv);
- db_free(&dbv2);
return 0;
}
+ }
+ else return ProcessDatabaseValueDefault(ci, (ci->dwFlag & 0x7F) == CNF_COUNTRY ? "Country" : "CompanyCountry");
+ db_free(&dbv);
+ }
+ break;
+
+ case CNF_FIRSTLAST:
+ if (!GetDatabaseString(ci, "FirstName", &dbv)) {
+ DBVARIANT dbv2;
+ if (!GetDatabaseString(ci, "LastName", &dbv2)) {
+ ci->type = CNFT_ASCIIZ;
+ if (ci->dwFlag & CNF_UNICODE) {
+ size_t len = wcslen(dbv.pwszVal) + wcslen(dbv2.pwszVal) + 2;
+ WCHAR* buf = (WCHAR*)mir_alloc(sizeof(WCHAR)*len);
+ if (buf != NULL)
+ wcscat(wcscat(wcscpy(buf, dbv.pwszVal), L" "), dbv2.pwszVal);
+ ci->pszVal = (TCHAR*)buf;
+ }
+ else {
+ size_t len = strlen(dbv.pszVal) + strlen(dbv2.pszVal) + 2;
+ char* buf = (char*)mir_alloc(len);
+ if (buf != NULL)
+ strcat(strcat(strcpy(buf, dbv.pszVal), " "), dbv2.pszVal);
+ ci->pszVal = (TCHAR*)buf;
+ }
db_free(&dbv);
+ db_free(&dbv2);
+ return 0;
}
- break;
+ db_free(&dbv);
+ }
+ break;
- case CNF_UNIQUEID:
+ case CNF_UNIQUEID:
{
if (db_mc_isMeta(ci->hContact)) {
TCHAR buf[40];
@@ -217,10 +219,10 @@ static INT_PTR GetContactInfo(WPARAM, LPARAM lParam) {
if ((INT_PTR)uid != CALLSERVICE_NOTFOUND && uid)
if (!ProcessDatabaseValueDefault(ci, uid))
return 0;
-
- break;
}
- case CNF_DISPLAYUID:
+ break;
+
+ case CNF_DISPLAYUID:
{
if (!ProcessDatabaseValueDefault(ci, "display_uid"))
return 0;
@@ -229,123 +231,121 @@ static INT_PTR GetContactInfo(WPARAM, LPARAM lParam) {
if (!ProcessDatabaseValueDefault(ci, uid))
return 0;
- break;
}
- case CNF_DISPLAYNC:
- case CNF_DISPLAY:
- {
- int i;
- for (i=0; i < NAMEORDERCOUNT; i++) {
- switch(nameOrder[i]) {
- case 0: // custom name
- {
- // make sure we aren't in CNF_DISPLAYNC mode
- // don't get custom name for NULL contact
- char* saveProto = ci->szProto; ci->szProto = "CList";
- if (ci->hContact != NULL && (ci->dwFlag&0x7F) == CNF_DISPLAY && !ProcessDatabaseValueDefault(ci, "MyHandle")) {
- ci->szProto = saveProto;
- return 0;
- }
+ break;
+
+ case CNF_DISPLAYNC:
+ case CNF_DISPLAY:
+ for (int i = 0; i < NAMEORDERCOUNT; i++) {
+ switch (nameOrder[i]) {
+ case 0: // custom name
+ // make sure we aren't in CNF_DISPLAYNC mode
+ // don't get custom name for NULL contact
+ {
+ char *saveProto = ci->szProto; ci->szProto = "CList";
+ if (ci->hContact != NULL && (ci->dwFlag & 0x7F) == CNF_DISPLAY && !ProcessDatabaseValueDefault(ci, "MyHandle")) {
ci->szProto = saveProto;
- break;
- }
- case 1:
- if (!ProcessDatabaseValueDefault(ci, "Nick")) // nick
- return 0;
- break;
- case 2:
- if (!ProcessDatabaseValueDefault(ci, "FirstName")) // First Name
- return 0;
- break;
- case 3:
- if (!ProcessDatabaseValueDefault(ci, "e-mail")) // E-mail
- return 0;
- break;
- case 4:
- if (!ProcessDatabaseValueDefault(ci, "LastName")) // Last Name
- return 0;
- break;
- case 5: // Unique id
- {
- // protocol must define a PFLAG_UNIQUEIDSETTING
- char *uid = (char*)CallProtoService(ci->szProto, PS_GETCAPS, PFLAG_UNIQUEIDSETTING, 0);
- if ((INT_PTR)uid != CALLSERVICE_NOTFOUND && uid) {
- if (!GetDatabaseString(ci, uid, &dbv)) {
- if (dbv.type == DBVT_BYTE || dbv.type == DBVT_WORD || dbv.type == DBVT_DWORD) {
- long value = (dbv.type == DBVT_BYTE) ? dbv.bVal:(dbv.type == DBVT_WORD ? dbv.wVal : dbv.dVal);
- if (ci->dwFlag & CNF_UNICODE) {
- WCHAR buf[ 40 ];
- _ltow(value, buf, 10);
- ci->pszVal = (TCHAR*)mir_wstrdup(buf);
- }
- else {
- char buf[ 40 ];
- _ltoa(value, buf, 10);
- ci->pszVal = (TCHAR*)mir_strdup(buf);
- }
- ci->type = CNFT_ASCIIZ;
- return 0;
- }
- if (dbv.type == DBVT_ASCIIZ && !(ci->dwFlag & CNF_UNICODE)) {
- ci->type = CNFT_ASCIIZ;
- ci->pszVal = dbv.ptszVal;
- return 0;
- }
- if (dbv.type == DBVT_WCHAR && (ci->dwFlag & CNF_UNICODE)) {
- ci->type = CNFT_ASCIIZ;
- ci->pszVal = dbv.ptszVal;
- return 0;
- }
- }
- }
- break;
+ return 0;
}
- case 6: // first + last name
- case 7: // last + first name
- if (!GetDatabaseString(ci, nameOrder[i] == 6 ? "FirstName" : "LastName", &dbv)) {
- DBVARIANT dbv2;
- if (!GetDatabaseString(ci, nameOrder[i] == 6 ? "LastName" : "FirstName", &dbv2)) {
- ci->type = CNFT_ASCIIZ;
-
+ ci->szProto = saveProto;
+ }
+ break;
+ case 1:
+ if (!ProcessDatabaseValueDefault(ci, "Nick")) // nick
+ return 0;
+ break;
+ case 2:
+ if (!ProcessDatabaseValueDefault(ci, "FirstName")) // First Name
+ return 0;
+ break;
+ case 3:
+ if (!ProcessDatabaseValueDefault(ci, "e-mail")) // E-mail
+ return 0;
+ break;
+ case 4:
+ if (!ProcessDatabaseValueDefault(ci, "LastName")) // Last Name
+ return 0;
+ break;
+ case 5: // Unique id
+ {
+ // protocol must define a PFLAG_UNIQUEIDSETTING
+ char *uid = (char*)CallProtoService(ci->szProto, PS_GETCAPS, PFLAG_UNIQUEIDSETTING, 0);
+ if ((INT_PTR)uid != CALLSERVICE_NOTFOUND && uid) {
+ if (!GetDatabaseString(ci, uid, &dbv)) {
+ if (dbv.type == DBVT_BYTE || dbv.type == DBVT_WORD || dbv.type == DBVT_DWORD) {
+ long value = (dbv.type == DBVT_BYTE) ? dbv.bVal : (dbv.type == DBVT_WORD ? dbv.wVal : dbv.dVal);
if (ci->dwFlag & CNF_UNICODE) {
- size_t len = wcslen(dbv.pwszVal) + wcslen(dbv2.pwszVal) + 2;
- WCHAR* buf = (WCHAR*)mir_alloc(sizeof(WCHAR)*len);
- if (buf != NULL)
- wcscat(wcscat(wcscpy(buf, dbv.pwszVal), L" "), dbv2.pwszVal);
- ci->pszVal = (TCHAR*)buf;
+ WCHAR buf[40];
+ _ltow(value, buf, 10);
+ ci->pszVal = (TCHAR*)mir_wstrdup(buf);
}
else {
- size_t len = strlen(dbv.pszVal) + strlen(dbv2.pszVal) + 2;
- char* buf = (char*)mir_alloc(len);
- if (buf != NULL)
- strcat(strcat(strcpy(buf, dbv.pszVal), " "), dbv2.pszVal);
- ci->pszVal = (TCHAR*)buf;
+ char buf[40];
+ _ltoa(value, buf, 10);
+ ci->pszVal = (TCHAR*)mir_strdup(buf);
}
-
- db_free(&dbv);
- db_free(&dbv2);
+ ci->type = CNFT_ASCIIZ;
+ return 0;
+ }
+ if (dbv.type == DBVT_ASCIIZ && !(ci->dwFlag & CNF_UNICODE)) {
+ ci->type = CNFT_ASCIIZ;
+ ci->pszVal = dbv.ptszVal;
+ return 0;
+ }
+ if (dbv.type == DBVT_WCHAR && (ci->dwFlag & CNF_UNICODE)) {
+ ci->type = CNFT_ASCIIZ;
+ ci->pszVal = dbv.ptszVal;
return 0;
}
- db_free(&dbv);
}
- break;
-
- case 8:
- if (ci->dwFlag & CNF_UNICODE)
- ci->pszVal = (TCHAR*)mir_wstrdup(TranslateW(L"'(Unknown contact)'"));
- else
- ci->pszVal = (TCHAR*)mir_strdup(Translate("'(Unknown contact)'"));
+ }
+ }
+ break;
+ case 6: // first + last name
+ case 7: // last + first name
+ if (!GetDatabaseString(ci, nameOrder[i] == 6 ? "FirstName" : "LastName", &dbv)) {
+ DBVARIANT dbv2;
+ if (!GetDatabaseString(ci, nameOrder[i] == 6 ? "LastName" : "FirstName", &dbv2)) {
ci->type = CNFT_ASCIIZ;
+
+ if (ci->dwFlag & CNF_UNICODE) {
+ size_t len = wcslen(dbv.pwszVal) + wcslen(dbv2.pwszVal) + 2;
+ WCHAR* buf = (WCHAR*)mir_alloc(sizeof(WCHAR)*len);
+ if (buf != NULL)
+ wcscat(wcscat(wcscpy(buf, dbv.pwszVal), L" "), dbv2.pwszVal);
+ ci->pszVal = (TCHAR*)buf;
+ }
+ else {
+ size_t len = strlen(dbv.pszVal) + strlen(dbv2.pszVal) + 2;
+ char* buf = (char*)mir_alloc(len);
+ if (buf != NULL)
+ strcat(strcat(strcpy(buf, dbv.pszVal), " "), dbv2.pszVal);
+ ci->pszVal = (TCHAR*)buf;
+ }
+
+ db_free(&dbv);
+ db_free(&dbv2);
return 0;
}
+ db_free(&dbv);
}
+ break;
+
+ case 8:
+ if (ci->dwFlag & CNF_UNICODE)
+ ci->pszVal = (TCHAR*)mir_wstrdup(TranslateW(L"'(Unknown contact)'"));
+ else
+ ci->pszVal = (TCHAR*)mir_strdup(Translate("'(Unknown contact)'"));
+ ci->type = CNFT_ASCIIZ;
+ return 0;
}
- break;
+ }
+ break;
- case CNF_TIMEZONE: {
+ case CNF_TIMEZONE:
+ {
HANDLE hTz = tmi.createByContact(ci->hContact, 0, TZF_KNOWNONLY);
- if (hTz)
- {
+ if (hTz) {
LPTIME_ZONE_INFORMATION tzi = tmi.getTzi(hTz);
int offset = tzi->Bias + tzi->StandardBias;
@@ -355,22 +355,25 @@ static INT_PTR GetContactInfo(WPARAM, LPARAM lParam) {
ci->type = CNFT_ASCIIZ;
return 0;
}
- break;
}
- case CNF_MYNOTES: {
- char* saveProto = ci->szProto; ci->szProto = "UserInfo";
- if (!ProcessDatabaseValueDefault(ci, "MyNotes")) {
- ci->szProto = saveProto;
- return 0;
- }
+ break;
+
+ case CNF_MYNOTES:
+ char* saveProto = ci->szProto; ci->szProto = "UserInfo";
+ if (!ProcessDatabaseValueDefault(ci, "MyNotes")) {
ci->szProto = saveProto;
- break;
+ return 0;
}
+ ci->szProto = saveProto;
+ break;
}
return 1;
}
+/////////////////////////////////////////////////////////////////////////////////////////
+// Options dialog
+
class CContactOptsDlg : public CDlgBase
{
int dragging;
@@ -467,14 +470,14 @@ public:
m_nameOrder.HitTest(&hti);
if (hDragItem == hti.hItem)
break;
-
+
TVITEMEX tvi;
tvi.mask = TVIF_HANDLE | TVIF_PARAM;
tvi.hItem = hti.hItem;
m_nameOrder.GetItem(&tvi);
if (tvi.lParam == SIZEOF(nameOrderDescr) - 1)
break;
-
+
if (hti.flags & (TVHT_ONITEM | TVHT_ONITEMRIGHT)) {
TCHAR name[128];
TVINSERTSTRUCT tvis = { 0 };
@@ -488,7 +491,7 @@ public:
tvis.hParent = NULL;
tvis.hInsertAfter = hti.hItem;
m_nameOrder.SelectItem(m_nameOrder.InsertItem(&tvis));
- SendMessage(GetParent(m_hwnd), PSM_CHANGED, 0, 0);
+ NotifyChange();
}
}
break;
diff --git a/src/modules/clist/genmenu.cpp b/src/modules/clist/genmenu.cpp
index d3a9728510..7270447bcd 100644
--- a/src/modules/clist/genmenu.cpp
+++ b/src/modules/clist/genmenu.cpp
@@ -69,7 +69,7 @@ void FreeAndNil(void **p)
int GetMenuObjbyId(const int id)
{
- for (int i=0; i < g_menus.getCount(); i++)
+ for (int i = 0; i < g_menus.getCount(); i++)
if (g_menus[i]->id == id)
return i;
@@ -131,8 +131,8 @@ int MO_MeasureMenuItem(LPMEASUREITEMSTRUCT mis)
if (pimi->iconId == -1)
return FALSE;
- mis->itemWidth = max(0, GetSystemMetrics(SM_CXSMICON)-GetSystemMetrics(SM_CXMENUCHECK)+4);
- mis->itemHeight = GetSystemMetrics(SM_CYSMICON)+2;
+ mis->itemWidth = max(0, GetSystemMetrics(SM_CXSMICON) - GetSystemMetrics(SM_CXMENUCHECK) + 4);
+ mis->itemHeight = GetSystemMetrics(SM_CYSMICON) + 2;
return TRUE;
}
@@ -154,12 +154,12 @@ int MO_DrawMenuItem(LPDRAWITEMSTRUCT dis)
if (pimi == NULL || pimi->iconId == -1)
return FALSE;
- int y = (dis->rcItem.bottom - dis->rcItem.top - GetSystemMetrics(SM_CYSMICON))/2+1;
+ int y = (dis->rcItem.bottom - dis->rcItem.top - GetSystemMetrics(SM_CYSMICON)) / 2 + 1;
if (dis->itemState & ODS_SELECTED) {
if (dis->itemState & ODS_CHECKED) {
RECT rc;
- rc.left = 2; rc.right = GetSystemMetrics(SM_CXSMICON)+2;
- rc.top = y; rc.bottom = rc.top+GetSystemMetrics(SM_CYSMICON)+2;
+ rc.left = 2; rc.right = GetSystemMetrics(SM_CXSMICON) + 2;
+ rc.top = y; rc.bottom = rc.top + GetSystemMetrics(SM_CYSMICON) + 2;
FillRect(dis->hDC, &rc, GetSysColorBrush(COLOR_HIGHLIGHT));
ImageList_DrawEx(pimi->parent->m_hMenuIcons, pimi->iconId, dis->hDC, 2, y, 0, 0, CLR_NONE, CLR_DEFAULT, ILD_SELECTED);
}
@@ -168,13 +168,13 @@ int MO_DrawMenuItem(LPDRAWITEMSTRUCT dis)
else {
if (dis->itemState & ODS_CHECKED) {
RECT rc;
- rc.left = 0; rc.right = GetSystemMetrics(SM_CXSMICON)+4;
- rc.top = y-2; rc.bottom = rc.top + GetSystemMetrics(SM_CYSMICON)+4;
+ rc.left = 0; rc.right = GetSystemMetrics(SM_CXSMICON) + 4;
+ rc.top = y - 2; rc.bottom = rc.top + GetSystemMetrics(SM_CYSMICON) + 4;
DrawEdge(dis->hDC, &rc, BDR_SUNKENOUTER, BF_RECT);
InflateRect(&rc, -1, -1);
COLORREF menuCol = GetSysColor(COLOR_MENU);
COLORREF hiliteCol = GetSysColor(COLOR_3DHIGHLIGHT);
- HBRUSH hBrush = CreateSolidBrush(RGB((GetRValue(menuCol)+GetRValue(hiliteCol))/2, (GetGValue(menuCol)+GetGValue(hiliteCol))/2, (GetBValue(menuCol)+GetBValue(hiliteCol))/2));
+ HBRUSH hBrush = CreateSolidBrush(RGB((GetRValue(menuCol) + GetRValue(hiliteCol)) / 2, (GetGValue(menuCol) + GetGValue(hiliteCol)) / 2, (GetBValue(menuCol) + GetBValue(hiliteCol)) / 2));
FillRect(dis->hDC, &rc, GetSysColorBrush(COLOR_MENU));
DeleteObject(hBrush);
ImageList_DrawEx(pimi->parent->m_hMenuIcons, pimi->iconId, dis->hDC, 2, y, 0, 0, CLR_NONE, GetSysColor(COLOR_MENU), ILD_BLEND50);
@@ -186,7 +186,7 @@ int MO_DrawMenuItem(LPDRAWITEMSTRUCT dis)
int MO_RemoveAllObjects()
{
- for (int i=0; i < g_menus.getCount(); i++)
+ for (int i = 0; i < g_menus.getCount(); i++)
delete g_menus[i];
g_menus.destroy();
return 0;
@@ -379,12 +379,11 @@ PMO_IntMenuItem MO_GetIntMenuItem(HGENMENU wParam)
if (result == NULL || wParam == (HGENMENU)0xffff1234 || wParam == HGENMENU_ROOT)
return NULL;
- __try
- {
+ __try {
if (result->signature != MENUITEM_SIGNATURE)
result = NULL;
}
- __except(EXCEPTION_EXECUTE_HANDLER)
+ __except (EXCEPTION_EXECUTE_HANDLER)
{
result = NULL;
}
@@ -426,7 +425,7 @@ INT_PTR MO_ProcessCommandByMenuIdent(WPARAM wParam, LPARAM lParam)
PMO_IntMenuItem pimi = NULL;
{
mir_cslock lck(csMenuHook);
- for (int i=0; i < g_menus.getCount(); i++)
+ for (int i = 0; i < g_menus.getCount(); i++)
if ((pimi = MO_RecursiveWalkMenu(g_menus[i]->m_items.first, FindMenuByCommand, (void*)wParam)) != NULL)
break;
}
@@ -578,7 +577,7 @@ struct KillMenuItemsParam
KillMenuItemsParam(int _hLangpack) :
hLangpack(_hLangpack),
arItems(10)
- {}
+ {}
int hLangpack;
LIST<TMO_IntMenuItem> arItems;
@@ -599,10 +598,10 @@ void KillModuleMenus(int hLangpack)
KillMenuItemsParam param(hLangpack);
mir_cslock lck(csMenuHook);
- for (int i=0; i < g_menus.getCount(); i++)
+ for (int i = 0; i < g_menus.getCount(); i++)
MO_RecursiveWalkMenu(g_menus[i]->m_items.first, (pfnWalkFunc)KillMenuItems, &param);
- for (int k=0; k < param.arItems.getCount(); k++)
+ for (int k = 0; k < param.arItems.getCount(); k++)
MO_RemoveMenuItem((WPARAM)param.arItems[k], 0);
}
@@ -620,7 +619,7 @@ static int GetNextObjectMenuItemId()
// if menu commands are exausted, pack the menu array
if (NextObjectMenuItemId >= CLISTMENUIDMAX) {
NextObjectMenuItemId = CLISTMENUIDMIN;
- for (int i=0; i < g_menus.getCount(); i++)
+ for (int i = 0; i < g_menus.getCount(); i++)
MO_RecursiveWalkMenu(g_menus[i]->m_items.first, PackMenuItems, NULL);
}
@@ -758,13 +757,13 @@ static int WhereToPlace(HMENU hMenu, PMO_MenuItem mi)
{
MENUITEMINFO mii = { sizeof(mii) };
mii.fMask = MIIM_SUBMENU | MIIM_DATA;
- for (int i = GetMenuItemCount(hMenu)-1; i >= 0; i--) {
+ for (int i = GetMenuItemCount(hMenu) - 1; i >= 0; i--) {
GetMenuItemInfo(hMenu, i, TRUE, &mii);
if (mii.fType != MFT_SEPARATOR) {
PMO_IntMenuItem pimi = MO_GetIntMenuItem((HGENMENU)mii.dwItemData);
if (pimi != NULL)
if (pimi->mi.position <= mi->position)
- return i+1;
+ return i + 1;
}
}
@@ -806,7 +805,7 @@ static void InsertMenuItemWithSeparators(HMENU hMenu, int uItem, MENUITEMINFO *l
// check for separator before
if (uItem) {
- UINT fType = GetMenuItemTypeData(hMenu, uItem-1, p);
+ UINT fType = GetMenuItemTypeData(hMenu, uItem - 1, p);
if (p != NULL && fType != MFT_SEPARATOR) {
if ((p->mi.position / SEPARATORPOSITIONINTERVAL) != (pimi->mi.position / SEPARATORPOSITIONINTERVAL)) {
// but might be supposed to be after the next one instead
@@ -1038,7 +1037,7 @@ int OnIconLibChanges(WPARAM, LPARAM)
{
{
mir_cslock lck(csMenuHook);
- for (int mo=0; mo < g_menus.getCount(); mo++)
+ for (int mo = 0; mo < g_menus.getCount(); mo++)
if ((int)hStatusMenuObject != g_menus[mo]->id) //skip status menu
MO_RecursiveWalkMenu(g_menus[mo]->m_items.first, MO_ReloadIcon, 0);
}
@@ -1074,7 +1073,7 @@ static int MO_RegisterIcon(PMO_IntMenuItem pmi, void*)
if ((p = _tcschr(p, '&')) == NULL)
break;
- memmove(p, p+1, sizeof(TCHAR)*(_tcslen(p+1)+1));
+ memmove(p, p + 1, sizeof(TCHAR)*(_tcslen(p + 1) + 1));
if (*p == '\0')
p++;
}
@@ -1102,7 +1101,7 @@ static int MO_RegisterIcon(PMO_IntMenuItem pmi, void*)
int RegisterAllIconsInIconLib()
{
// register all icons
- for (int mo=0; mo < g_menus.getCount(); mo++) {
+ for (int mo = 0; mo < g_menus.getCount(); mo++) {
if ((int)hStatusMenuObject == g_menus[mo]->id) //skip status menu
continue;
@@ -1118,7 +1117,7 @@ int TryProcessDoubleClick(MCONTACT hContact)
if (iMenuID != -1) {
NotifyEventHooks(hPreBuildContactMenuEvent, hContact, 0);
- PMO_IntMenuItem pimi = (PMO_IntMenuItem)MO_GetDefaultMenuItem((WPARAM)g_menus[ iMenuID ]->m_items.first, 0);
+ PMO_IntMenuItem pimi = (PMO_IntMenuItem)MO_GetDefaultMenuItem((WPARAM)g_menus[iMenuID]->m_items.first, 0);
if (pimi != NULL) {
MO_ProcessCommand(pimi, hContact);
return 0;
@@ -1189,7 +1188,7 @@ int InitGenMenu()
bIsGenMenuInited = true;
HookEvent(ME_SYSTEM_MODULESLOADED, OnModulesLoaded);
- HookEvent(ME_OPT_INITIALISE, GenMenuOptInit);
+ HookEvent(ME_OPT_INITIALISE, GenMenuOptInit);
return 0;
}
diff --git a/src/modules/clist/genmenu.h b/src/modules/clist/genmenu.h
index 6bfa111f93..198d5417bc 100644
--- a/src/modules/clist/genmenu.h
+++ b/src/modules/clist/genmenu.h
@@ -135,10 +135,12 @@ BOOL FindMenuHanleByGlobalID(HMENU hMenu, int globalID, struct _MenuItemHandles
LPTSTR GetMenuItemText(PMO_IntMenuItem);
-int GenMenuOptInit(WPARAM wParam, LPARAM lParam);
+int GenMenuOptInit(WPARAM wParam, LPARAM);
int GetMenuObjbyId(const int id);
int GetMenuItembyId(const int objpos, const int id);
+int ProtocolOrderOptInit(WPARAM wParam, LPARAM);
+
INT_PTR MO_GetMenuItem(WPARAM wParam, LPARAM lParam);
void FreeAndNil(void **p);
#endif
diff --git a/src/modules/clist/genmenuopt.cpp b/src/modules/clist/genmenuopt.cpp
index 8bcce682b0..054ac75072 100644
--- a/src/modules/clist/genmenuopt.cpp
+++ b/src/modules/clist/genmenuopt.cpp
@@ -31,226 +31,134 @@ extern bool bIconsDisabled;
extern int DefaultImageListColorDepth;
void RebuildProtoMenus(int);
-struct OrderData
+struct MenuItemOptData : public MZeroedObject
{
- int dragging;
- HTREEITEM hDragItem;
- int iInitMenuValue;
-};
+ ~MenuItemOptData() {}
-typedef struct tagMenuItemOptData
-{
- TCHAR *name;
- TCHAR *defname;
- char *uniqname;
+ int pos; // sort key
- int pos;
+ ptrT name;
+ ptrT defname;
+ ptrA uniqname;
+
bool bShow, bIsSelected;
int id;
PMO_IntMenuItem pimi;
-}
- MenuItemOptData, *lpMenuItemOptData;
-
-static BOOL GetCurrentMenuObjectID(HWND hwndDlg, int* result)
-{
- HWND hTree = GetDlgItem(hwndDlg, IDC_MENUOBJECTS);
- HTREEITEM hti = TreeView_GetSelection(hTree);
- if (hti == NULL)
- return FALSE;
-
- TVITEM tvi;
- tvi.mask = TVIF_HANDLE | TVIF_PARAM;
- tvi.hItem = hti;
- TreeView_GetItem(hTree, &tvi);
- *result = (int)tvi.lParam;
- return TRUE;
-}
+};
-static int SaveTree(HWND hwndDlg)
+class CGenMenuOptionsPage : public CDlgBase
{
- int MenuObjectId;
- if (!GetCurrentMenuObjectID(hwndDlg, &MenuObjectId))
- return 0;
-
- HWND hTree = GetDlgItem(hwndDlg, IDC_MENUITEMS);
- TCHAR idstr[100];
-
- TVITEM tvi;
- tvi.hItem = TreeView_GetRoot(hTree);
- tvi.cchTextMax = SIZEOF(idstr);
- tvi.mask = TVIF_TEXT | TVIF_PARAM | TVIF_HANDLE;
- tvi.pszText = idstr;
-
- int count = 0;
- int menupos = GetMenuObjbyId(MenuObjectId);
- if (menupos == -1)
- return -1;
-
- TIntMenuObject *pimo = g_menus[menupos];
-
- char MenuNameItems[256];
- mir_snprintf(MenuNameItems, SIZEOF(MenuNameItems), "%s_Items", pimo->pszName);
- int runtimepos = 100;
+ int m_bDragging;
+ int iInitMenuValue;
- while (tvi.hItem != NULL) {
- TreeView_GetItem(hTree, &tvi);
- MenuItemOptData *iod = (MenuItemOptData*)tvi.lParam;
- if (iod->pimi) {
- char menuItemName[256], DBString[300];
- GetMenuItemName(iod->pimi, menuItemName, sizeof(menuItemName));
+ HTREEITEM m_hDragItem;
- mir_snprintf(DBString, SIZEOF(DBString), "%s_visible", menuItemName);
- db_set_b(NULL, MenuNameItems, DBString, iod->bShow);
+ void SaveTree()
+ {
+ int MenuObjectId;
+ if (!GetCurrentMenuObjectID(MenuObjectId))
+ return;
+
+ TCHAR idstr[100];
+
+ TVITEMEX tvi;
+ tvi.hItem = m_menuItems.GetRoot();
+ tvi.cchTextMax = SIZEOF(idstr);
+ tvi.mask = TVIF_TEXT | TVIF_PARAM | TVIF_HANDLE;
+ tvi.pszText = idstr;
+
+ int count = 0;
+ int menupos = GetMenuObjbyId(MenuObjectId);
+ if (menupos == -1)
+ return;
+
+ TIntMenuObject *pimo = g_menus[menupos];
+
+ char MenuNameItems[256];
+ mir_snprintf(MenuNameItems, SIZEOF(MenuNameItems), "%s_Items", pimo->pszName);
+ int runtimepos = 100;
+
+ while (tvi.hItem != NULL) {
+ m_menuItems.GetItem(&tvi);
+ MenuItemOptData *iod = (MenuItemOptData*)tvi.lParam;
+ if (iod->pimi) {
+ char menuItemName[256], DBString[300];
+ GetMenuItemName(iod->pimi, menuItemName, sizeof(menuItemName));
+
+ mir_snprintf(DBString, SIZEOF(DBString), "%s_visible", menuItemName);
+ db_set_b(NULL, MenuNameItems, DBString, iod->bShow);
+
+ mir_snprintf(DBString, SIZEOF(DBString), "%s_pos", menuItemName);
+ db_set_dw(NULL, MenuNameItems, DBString, runtimepos);
+
+ mir_snprintf(DBString, SIZEOF(DBString), "%s_name", menuItemName);
+ if (iod->name != NULL && iod->defname != NULL &&
+ mir_tstrcmp(iod->name, iod->defname) != 0)
+ db_set_ts(NULL, MenuNameItems, DBString, iod->name);
+ else
+ db_unset(NULL, MenuNameItems, DBString);
- mir_snprintf(DBString, SIZEOF(DBString), "%s_pos", menuItemName);
- db_set_dw(NULL, MenuNameItems, DBString, runtimepos);
+ runtimepos += 100;
+ }
- mir_snprintf(DBString, SIZEOF(DBString), "%s_name", menuItemName);
- if (iod->name != NULL && iod->defname != NULL &&
- mir_tstrcmp(iod->name, iod->defname) != 0)
- db_set_ts(NULL, MenuNameItems, DBString, iod->name);
- else
- db_unset(NULL, MenuNameItems, DBString);
+ if (iod->name && !_tcscmp(iod->name, STR_SEPARATOR) && iod->bShow)
+ runtimepos += SEPARATORPOSITIONINTERVAL;
- runtimepos += 100;
+ tvi.hItem = m_menuItems.GetNextSibling(tvi.hItem);
+ count++;
}
-
- if (iod->name && !_tcscmp(iod->name, STR_SEPARATOR) && iod->bShow)
- runtimepos += SEPARATORPOSITIONINTERVAL;
-
- tvi.hItem = TreeView_GetNextSibling(hTree, tvi.hItem);
- count++;
}
- return 1;
-}
-static int BuildMenuObjectsTree(HWND hwndDlg)
-{
- TVINSERTSTRUCT tvis;
- HWND hTree = GetDlgItem(hwndDlg, IDC_MENUOBJECTS);
- int i;
-
- tvis.hParent = NULL;
- tvis.hInsertAfter = TVI_LAST;
- tvis.item.mask = TVIF_PARAM | TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE;
- TreeView_DeleteAllItems(hTree);
- if (g_menus.getCount() == 0)
- return FALSE;
-
- for (i=0; i < g_menus.getCount(); i++) {
- TIntMenuObject *p = g_menus[i];
- if (p->id == (int)hStatusMenuObject || !p->m_bUseUserDefinedItems)
- continue;
-
- tvis.item.lParam = (LPARAM)p->id;
- tvis.item.pszText = TranslateTS(p->ptszDisplayName);
- tvis.item.iImage = tvis.item.iSelectedImage = TRUE;
- TreeView_InsertItem(hTree, &tvis);
- }
- return 1;
-}
-
-static int sortfunc(const void *a, const void *b)
-{
- lpMenuItemOptData *sd1, *sd2;
- sd1 = (lpMenuItemOptData *)a;
- sd2 = (lpMenuItemOptData *)b;
- if ((*sd1)->pos > (*sd2)->pos)
- return 1;
-
- if ((*sd1)->pos < (*sd2)->pos)
- return -1;
-
- return 0;
-}
-
-static int InsertSeparator(HWND hwndDlg)
-{
- HWND hMenuTree = GetDlgItem(hwndDlg, IDC_MENUITEMS);
- HTREEITEM hti = TreeView_GetSelection(hMenuTree);
- if (hti == NULL)
- return 1;
-
- TVITEM tvi = {0};
- tvi.mask = TVIF_HANDLE | TVIF_IMAGE | TVIF_SELECTEDIMAGE | TVIF_PARAM | TVIF_TEXT;
- tvi.hItem = hti;
- if (TreeView_GetItem(hMenuTree, &tvi) == FALSE)
- return 1;
+ void FreeTreeData()
+ {
+ HTREEITEM hItem = m_menuItems.GetRoot();
+ while (hItem != NULL) {
+ TVITEMEX tvi;
+ tvi.mask = TVIF_HANDLE | TVIF_PARAM;
+ tvi.hItem = hItem;
+ m_menuItems.GetItem(&tvi);
+ delete (MenuItemOptData *)tvi.lParam;
- MenuItemOptData *PD = (MenuItemOptData*)mir_calloc(sizeof(MenuItemOptData));
- PD->id = -1;
- PD->name = mir_tstrdup(STR_SEPARATOR);
- PD->bShow = true;
- PD->pos = ((MenuItemOptData *)tvi.lParam)->pos-1;
-
- TVINSERTSTRUCT tvis = {0};
- tvis.item.lParam = (LPARAM)(PD);
- tvis.item.pszText = PD->name;
- tvis.item.iImage = tvis.item.iSelectedImage = PD->bShow;
- tvis.hInsertAfter = hti;
- tvis.item.mask = TVIF_PARAM | TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE;
- TreeView_InsertItem(hMenuTree, &tvis);
- return 1;
-}
+ tvi.lParam = 0;
+ m_menuItems.SetItem(&tvi);
-static void FreeTreeData(HWND hwndDlg)
-{
- HTREEITEM hItem = TreeView_GetRoot( GetDlgItem(hwndDlg, IDC_MENUITEMS));
- while (hItem != NULL) {
- TVITEM tvi;
- tvi.mask = TVIF_HANDLE | TVIF_PARAM;
- tvi.hItem = hItem;
- TreeView_GetItem( GetDlgItem(hwndDlg, IDC_MENUITEMS), &tvi);
- {
- MenuItemOptData* O = (MenuItemOptData *)tvi.lParam;
- if (O->name) mir_free(O->name);
- if (O->defname) mir_free(O->defname);
- if (O->uniqname) mir_free(O->uniqname);
- mir_free(O);
+ hItem = m_menuItems.GetNextSibling(hItem);
}
-
- tvi.lParam = 0;
- TreeView_SetItem( GetDlgItem(hwndDlg, IDC_MENUITEMS), &tvi);
-
- hItem = TreeView_GetNextSibling( GetDlgItem(hwndDlg, IDC_MENUITEMS), hItem);
}
-}
-static int BuildTree(HWND hwndDlg, int MenuObjectId, BOOL bReread)
-{
- char menuItemName[256], MenuNameItems[256];
- char buf[256];
+ void RebuildCurrent()
+ {
+ int MenuObjectID;
+ if (GetCurrentMenuObjectID(MenuObjectID))
+ BuildTree(MenuObjectID, true);
+ }
- FreeTreeData(hwndDlg);
- TreeView_DeleteAllItems( GetDlgItem(hwndDlg, IDC_MENUITEMS));
+ bool BuildTree(int MenuObjectId, bool bReread)
+ {
+ char buf[256];
- int menupos = GetMenuObjbyId(MenuObjectId);
- if (menupos == -1)
- return FALSE;
+ FreeTreeData();
+ m_menuItems.DeleteAllItems();
- TIntMenuObject* pimo = g_menus[menupos];
- if (pimo->m_items.first == NULL)
- return FALSE;
+ int menupos = GetMenuObjbyId(MenuObjectId);
+ if (menupos == -1)
+ return false;
- mir_snprintf(MenuNameItems, SIZEOF(MenuNameItems), "%s_Items", pimo->pszName);
+ TIntMenuObject* pimo = g_menus[menupos];
+ if (pimo->m_items.first == NULL)
+ return false;
- int count = 0;
- {
- for (PMO_IntMenuItem p = pimo->m_items.first; p != NULL; p = p->next)
- if (p->mi.root == (HGENMENU)-1 || p->mi.root == NULL)
- count++;
- }
+ char menuItemName[256], MenuNameItems[256];
+ mir_snprintf(MenuNameItems, SIZEOF(MenuNameItems), "%s_Items", pimo->pszName);
- lpMenuItemOptData *PDar = (lpMenuItemOptData*)mir_alloc(sizeof(lpMenuItemOptData)*count);
+ LIST<MenuItemOptData> arItems(20, NumericKeySortT);
- count = 0;
- {
for (PMO_IntMenuItem p = pimo->m_items.first; p != NULL; p = p->next) {
if (p->mi.root != (HGENMENU)-1 && p->mi.root != NULL)
continue;
- MenuItemOptData *PD = (MenuItemOptData*)mir_calloc(sizeof(MenuItemOptData));
+ MenuItemOptData *PD = new MenuItemOptData();
GetMenuItemName(p, menuItemName, sizeof(menuItemName));
{
DBVARIANT dbv;
@@ -280,164 +188,338 @@ static int BuildTree(HWND hwndDlg, int MenuObjectId, BOOL bReread)
if (p->UniqName)
PD->uniqname = mir_strdup(p->UniqName);
- PDar[ count ] = PD;
- count++;
+ arItems.insert(PD);
}
- }
- qsort(PDar, count, sizeof(lpMenuItemOptData), sortfunc);
-
- SendDlgItemMessage(hwndDlg, IDC_MENUITEMS, WM_SETREDRAW, FALSE, 0);
- int lastpos = 0;
- bool first = TRUE;
-
- TVINSERTSTRUCT tvis;
- tvis.hParent = NULL;
- tvis.hInsertAfter = TVI_LAST;
- tvis.item.mask = TVIF_PARAM | TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE;
- for (int i=0; i < count; i++) {
- if (PDar[i]->pos - lastpos >= SEPARATORPOSITIONINTERVAL) {
- MenuItemOptData *PD = (MenuItemOptData*)mir_calloc(sizeof(MenuItemOptData));
- PD->id = -1;
- PD->name = mir_tstrdup(STR_SEPARATOR);
- PD->pos = PDar[i]->pos - 1;
- PD->bShow = true;
-
- tvis.item.lParam = (LPARAM)PD;
- tvis.item.pszText = PD->name;
- tvis.item.iImage = tvis.item.iSelectedImage = PD->bShow;
- SendDlgItemMessage(hwndDlg, IDC_MENUITEMS, TVM_INSERTITEM, 0, (LPARAM)&tvis);
+ m_menuItems.SendMsg(WM_SETREDRAW, FALSE, 0);
+ int lastpos = 0;
+ bool bIsFirst = TRUE;
+
+ TVINSERTSTRUCT tvis;
+ tvis.hParent = NULL;
+ tvis.hInsertAfter = TVI_LAST;
+ tvis.item.mask = TVIF_PARAM | TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE;
+ for (int i = 0; i < arItems.getCount(); i++) {
+ auto p = arItems[i];
+ if (p->pos - lastpos >= SEPARATORPOSITIONINTERVAL) {
+ MenuItemOptData *PD = new MenuItemOptData();
+ PD->id = -1;
+ PD->name = mir_tstrdup(STR_SEPARATOR);
+ PD->pos = p->pos - 1;
+ PD->bShow = true;
+
+ tvis.item.lParam = (LPARAM)PD;
+ tvis.item.pszText = PD->name;
+ tvis.item.iImage = tvis.item.iSelectedImage = PD->bShow;
+ m_menuItems.InsertItem(&tvis);
+ }
+
+ tvis.item.lParam = (LPARAM)p;
+ tvis.item.pszText = p->name;
+ tvis.item.iImage = tvis.item.iSelectedImage = p->bShow;
+
+ HTREEITEM hti = m_menuItems.InsertItem(&tvis);
+ if (bIsFirst) {
+ m_menuItems.SelectItem(hti);
+ bIsFirst = false;
+ }
+
+ lastpos = p->pos;
}
- tvis.item.lParam = (LPARAM)PDar[i];
- tvis.item.pszText = PDar[i]->name;
- tvis.item.iImage = tvis.item.iSelectedImage = PDar[i]->bShow;
+ m_menuItems.SendMsg(WM_SETREDRAW, TRUE, 0);
+
+ ShowWindow(m_warning.GetHwnd(), (pimo->m_bUseUserDefinedItems) ? SW_HIDE : SW_SHOW);
+ m_menuItems.Enable(pimo->m_bUseUserDefinedItems);
+ m_btnInsert.Enable(pimo->m_bUseUserDefinedItems);
+ return 1;
+ }
+
+ bool GetCurrentMenuObjectID(int &result)
+ {
+ HTREEITEM hti = m_menuObjects.GetSelection();
+ if (hti == NULL)
+ return false;
+
+ TVITEMEX tvi;
+ tvi.mask = TVIF_HANDLE | TVIF_PARAM;
+ tvi.hItem = hti;
+ m_menuObjects.GetItem(&tvi);
+ result = (int)tvi.lParam;
+ return true;
+ }
- HTREEITEM hti = (HTREEITEM)SendDlgItemMessage(hwndDlg, IDC_MENUITEMS, TVM_INSERTITEM, 0, (LPARAM)&tvis);
- if (first) {
- TreeView_SelectItem( GetDlgItem(hwndDlg, IDC_MENUITEMS), hti);
- first = FALSE;
+ HTREEITEM MoveItemAbove(HTREEITEM hItem, HTREEITEM hInsertAfter)
+ {
+ TVITEMEX tvi = { 0 };
+ tvi.mask = TVIF_HANDLE | TVIF_PARAM;
+ tvi.hItem = hItem;
+ if (!m_menuItems.GetItem(&tvi))
+ return NULL;
+
+ if (hItem && hInsertAfter) {
+ TCHAR name[128];
+ if (hItem == hInsertAfter)
+ return hItem;
+
+ TVINSERTSTRUCT tvis = { 0 };
+ tvis.itemex.mask = TVIF_HANDLE | TVIF_PARAM | TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE;
+ tvis.itemex.stateMask = 0xFFFFFFFF;
+ tvis.itemex.pszText = name;
+ tvis.itemex.cchTextMax = SIZEOF(name);
+ tvis.itemex.hItem = hItem;
+ tvis.itemex.iImage = tvis.itemex.iSelectedImage = ((MenuItemOptData*)tvi.lParam)->bShow;
+ if (!m_menuItems.GetItem(&tvis.itemex))
+ return NULL;
+
+ m_menuItems.DeleteItem(hItem);
+
+ tvis.hParent = NULL;
+ tvis.hInsertAfter = hInsertAfter;
+ return m_menuItems.InsertItem(&tvis);
}
+ return NULL;
+ }
- lastpos = PDar[i]->pos;
+ CCtrlTreeView m_menuItems, m_menuObjects;
+ CCtrlCheck m_radio1, m_radio2, m_disableIcons;
+ CCtrlEdit m_customName, m_service;
+ CCtrlButton m_btnInsert, m_btnReset, m_btnSet, m_btnDefault;
+ CCtrlBase m_warning;
+
+public:
+ CGenMenuOptionsPage() :
+ CDlgBase(hInst, IDD_OPT_GENMENU),
+ m_menuItems(this, IDC_MENUITEMS),
+ m_menuObjects(this, IDC_MENUOBJECTS),
+ m_radio1(this, IDC_RADIO1),
+ m_radio2(this, IDC_RADIO2),
+ m_disableIcons(this, IDC_DISABLEMENUICONS),
+ m_btnInsert(this, IDC_INSERTSEPARATOR),
+ m_btnReset(this, IDC_RESETMENU),
+ m_btnSet(this, IDC_GENMENU_SET),
+ m_btnDefault(this, IDC_GENMENU_DEFAULT),
+ m_customName(this, IDC_GENMENU_CUSTOMNAME),
+ m_service(this, IDC_GENMENU_SERVICE),
+ m_warning(this, IDC_NOTSUPPORTWARNING)
+ {
+ m_btnSet.OnClick = Callback(this, &CGenMenuOptionsPage::btnSet_Clicked);
+ m_btnReset.OnClick = Callback(this, &CGenMenuOptionsPage::btnReset_Clicked);
+ m_btnInsert.OnClick = Callback(this, &CGenMenuOptionsPage::btnInsert_Clicked);
+ m_btnDefault.OnClick = Callback(this, &CGenMenuOptionsPage::btnDefault_Clicked);
+
+ m_menuObjects.OnSelChanged = Callback(this, &CGenMenuOptionsPage::onMenuObjectChanged);
+
+ m_menuItems.OnSelChanged = Callback(this, &CGenMenuOptionsPage::onMenuItemChanged);
+ m_menuItems.OnBeginDrag = Callback(this, &CGenMenuOptionsPage::onMenuItemBeginDrag);
}
- SendDlgItemMessage(hwndDlg, IDC_MENUITEMS, WM_SETREDRAW, TRUE, 0);
- mir_free(PDar);
- ShowWindow( GetDlgItem(hwndDlg, IDC_NOTSUPPORTWARNING), (pimo->m_bUseUserDefinedItems) ? SW_HIDE : SW_SHOW);
- EnableWindow( GetDlgItem(hwndDlg, IDC_MENUITEMS), pimo->m_bUseUserDefinedItems);
- EnableWindow( GetDlgItem(hwndDlg, IDC_INSERTSEPARATOR), pimo->m_bUseUserDefinedItems);
- return 1;
-}
+ //---- init dialog -------------------------------------------
+ virtual void OnInitDialog()
+ {
+ iInitMenuValue = db_get_b(NULL, "CList", "MoveProtoMenus", TRUE);
-static void RebuildCurrent(HWND hwndDlg)
-{
- int MenuObjectID;
- if (GetCurrentMenuObjectID(hwndDlg, &MenuObjectID))
- BuildTree(hwndDlg, MenuObjectID, TRUE);
-}
+ HIMAGELIST himlCheckBoxes = ImageList_Create(GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON), ILC_COLOR32 | ILC_MASK, 2, 2);
+ ImageList_AddIcon_IconLibLoaded(himlCheckBoxes, SKINICON_OTHER_NOTICK);
+ ImageList_AddIcon_IconLibLoaded(himlCheckBoxes, SKINICON_OTHER_TICK);
-static void ResetMenuItems(HWND hwndDlg)
-{
- int MenuObjectID;
- if (GetCurrentMenuObjectID(hwndDlg, &MenuObjectID))
- BuildTree(hwndDlg, MenuObjectID, FALSE);
-}
+ m_menuItems.SetImageList(himlCheckBoxes, TVSIL_NORMAL);
+ m_menuObjects.SetImageList(himlCheckBoxes, TVSIL_NORMAL);
-static HTREEITEM MoveItemAbove(HWND hTreeWnd, HTREEITEM hItem, HTREEITEM hInsertAfter)
-{
- TVITEM tvi = { 0 };
- tvi.mask = TVIF_HANDLE | TVIF_PARAM;
- tvi.hItem = hItem;
- if (!SendMessage(hTreeWnd, TVM_GETITEM, 0, (LPARAM)&tvi))
- return NULL;
- if (hItem && hInsertAfter) {
+ if (iInitMenuValue)
+ m_radio2.SetState(true);
+ else
+ m_radio1.SetState(true);
+
+ m_disableIcons.SetState(bIconsDisabled);
+
+ //---- init tree -------------------------------------------
TVINSERTSTRUCT tvis;
- TCHAR name[128];
- if (hItem == hInsertAfter)
- return hItem;
-
- tvis.item.mask = TVIF_HANDLE | TVIF_PARAM | TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE;
- tvis.item.stateMask = 0xFFFFFFFF;
- tvis.item.pszText = name;
- tvis.item.cchTextMax = SIZEOF(name);
- tvis.item.hItem = hItem;
- tvis.item.iImage = tvis.item.iSelectedImage = ((MenuItemOptData*)tvi.lParam)->bShow;
- if (!SendMessage(hTreeWnd, TVM_GETITEM, 0, (LPARAM)&tvis.item))
- return NULL;
- if (!TreeView_DeleteItem(hTreeWnd, hItem))
- return NULL;
tvis.hParent = NULL;
- tvis.hInsertAfter = hInsertAfter;
- return TreeView_InsertItem(hTreeWnd, &tvis);
+ tvis.hInsertAfter = TVI_LAST;
+ tvis.item.mask = TVIF_PARAM | TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE;
+
+ for (int i = 0; i < g_menus.getCount(); i++) {
+ TIntMenuObject *p = g_menus[i];
+ if (p->id == (int)hStatusMenuObject || !p->m_bUseUserDefinedItems)
+ continue;
+
+ tvis.item.lParam = (LPARAM)p->id;
+ tvis.item.pszText = TranslateTS(p->ptszDisplayName);
+ tvis.item.iImage = tvis.item.iSelectedImage = true;
+ m_menuObjects.InsertItem(&tvis);
+ }
}
- return NULL;
-}
-LRESULT CALLBACK LBTNDOWNProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
-{
- if (uMsg == WM_LBUTTONDOWN && !(GetKeyState(VK_CONTROL)&0x8000)) {
+ virtual void OnApply()
+ {
+ bIconsDisabled = m_disableIcons.GetState() != 0;
+ db_set_b(NULL, "CList", "DisableMenuIcons", bIconsDisabled);
+ SaveTree();
+
+ int iNewMenuValue = !m_radio1.GetState();
+ if (iNewMenuValue != iInitMenuValue) {
+ RebuildProtoMenus(iNewMenuValue);
+ iInitMenuValue = iNewMenuValue;
+ }
+ RebuildCurrent();
+ }
- TVHITTESTINFO hti;
- hti.pt.x = (short)LOWORD(lParam);
- hti.pt.y = (short)HIWORD(lParam);
- // ClientToScreen(hwndDlg, &hti.pt);
- // ScreenToClient( GetDlgItem(hwndDlg, IDC_MENUITEMS), &hti.pt);
- TreeView_HitTest(hwnd, &hti);
- if (hti.flags&TVHT_ONITEMLABEL) {
- /// LabelClicked Set/unset selection
- TVITEM tvi;
- HWND tvw = hwnd;
- tvi.mask = TVIF_HANDLE|TVIF_PARAM;
- tvi.hItem = hti.hItem;
- TreeView_GetItem(tvw, &tvi);
-
- if (!((MenuItemOptData *)tvi.lParam)->bIsSelected) { /* is not Selected*/
- // reset all selection except current
- HTREEITEM hit;
- hit = TreeView_GetRoot(tvw);
- if (hit)
- do {
- TVITEM tvi = {0};
- tvi.mask = TVIF_HANDLE|TVIF_PARAM;
- tvi.hItem = hit;
- TreeView_GetItem(tvw, &tvi);
-
- if (hti.hItem != hit)
- ((MenuItemOptData *)tvi.lParam)->bIsSelected = false;
- else
- ((MenuItemOptData *)tvi.lParam)->bIsSelected = true;
- TreeView_SetItem(tvw, &tvi);
- }
- while (hit = TreeView_GetNextSibling(tvw, hit));
- }
+ virtual void OnDestroy()
+ {
+ ImageList_Destroy(m_menuItems.GetImageList(TVSIL_NORMAL));
+ FreeTreeData();
+ }
+
+ void btnInsert_Clicked(CCtrlButton*)
+ {
+ HTREEITEM hti = m_menuItems.GetSelection();
+ if (hti == NULL)
+ return;
+
+ TVITEMEX tvi = { 0 };
+ tvi.mask = TVIF_HANDLE | TVIF_IMAGE | TVIF_SELECTEDIMAGE | TVIF_PARAM | TVIF_TEXT;
+ tvi.hItem = hti;
+ if (!m_menuItems.GetItem(&tvi))
+ return;
+
+ MenuItemOptData *PD = new MenuItemOptData();
+ PD->id = -1;
+ PD->name = mir_tstrdup(STR_SEPARATOR);
+ PD->bShow = true;
+ PD->pos = ((MenuItemOptData *)tvi.lParam)->pos - 1;
+
+ TVINSERTSTRUCT tvis = { 0 };
+ tvis.item.lParam = (LPARAM)(PD);
+ tvis.item.pszText = PD->name;
+ tvis.item.iImage = tvis.item.iSelectedImage = PD->bShow;
+ tvis.hInsertAfter = hti;
+ tvis.item.mask = TVIF_PARAM | TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE;
+ m_menuItems.InsertItem(&tvis);
+
+ NotifyChange();
+ }
+
+ void btnReset_Clicked(CCtrlButton*)
+ {
+ int MenuObjectID;
+ if (GetCurrentMenuObjectID(MenuObjectID)) {
+ BuildTree(MenuObjectID, false);
+ NotifyChange();
}
}
- return mir_callNextSubclass(hwnd, LBTNDOWNProc, uMsg, wParam, lParam);
-}
+ void btnDefault_Clicked(CCtrlButton*)
+ {
+ HTREEITEM hti = m_menuItems.GetSelection();
+ if (hti == NULL)
+ return;
-static int handleCustomDraw(HWND hWndTreeView, LPNMTVCUSTOMDRAW pNMTVCD)
-{
- if (pNMTVCD == NULL)
- return -1;
+ TVITEMEX tvi;
+ tvi.mask = TVIF_HANDLE | TVIF_IMAGE | TVIF_SELECTEDIMAGE | TVIF_PARAM;
+ tvi.hItem = hti;
+ m_menuItems.GetItem(&tvi);
+
+ MenuItemOptData *iod = (MenuItemOptData *)tvi.lParam;
+ if (iod->name && _tcsstr(iod->name, STR_SEPARATOR))
+ return;
+
+ iod->name = mir_tstrdup(iod->defname);
+
+ SaveTree();
+ RebuildCurrent();
+ NotifyChange();
+ }
+
+ void btnSet_Clicked(CCtrlButton*)
+ {
+ HTREEITEM hti = m_menuItems.GetSelection();
+ if (hti == NULL)
+ return;
+
+ TVITEMEX tvi;
+ tvi.mask = TVIF_HANDLE | TVIF_IMAGE | TVIF_SELECTEDIMAGE | TVIF_PARAM;
+ tvi.hItem = hti;
+ m_menuItems.GetItem(&tvi);
+
+ MenuItemOptData *iod = (MenuItemOptData *)tvi.lParam;
+ if (iod->name && _tcsstr(iod->name, STR_SEPARATOR))
+ return;
+
+ iod->name = m_customName.GetText();
+
+ SaveTree();
+ RebuildCurrent();
+ NotifyChange();
+ }
- switch (pNMTVCD->nmcd.dwDrawStage) {
- case CDDS_PREPAINT:
- return CDRF_NOTIFYITEMDRAW;
+ void onMenuObjectChanged(void*)
+ {
+ RebuildCurrent();
+ }
+
+ void onMenuItemChanged(void*)
+ {
+ m_customName.SetTextA("");
+ m_service.SetTextA("");
+
+ m_btnDefault.Enable(false);
+ m_btnSet.Enable(false);
+ m_customName.Enable(false);
+
+ HTREEITEM hti = m_menuItems.GetSelection();
+ if (hti == NULL)
+ return;
+
+ TVITEMEX tvi;
+ tvi.mask = TVIF_HANDLE | TVIF_IMAGE | TVIF_SELECTEDIMAGE | TVIF_PARAM;
+ tvi.hItem = hti;
+ m_menuItems.GetItem(&tvi);
+ if (tvi.lParam == 0)
+ return;
+
+ MenuItemOptData *iod = (MenuItemOptData *)tvi.lParam;
+ if (iod->name && _tcsstr(iod->name, STR_SEPARATOR))
+ return;
- case CDDS_ITEMPREPAINT:
- {
+ m_customName.SetText(iod->name);
+
+ if (iod->pimi->submenu.first == NULL && iod->uniqname)
+ m_service.SetTextA(iod->uniqname);
+
+ m_btnDefault.Enable(mir_tstrcmp(iod->name, iod->defname) != 0);
+ m_btnSet.Enable(true);
+ m_customName.Enable(true);
+ }
+
+ void onMenuItemBeginDrag(CCtrlTreeView::TEventInfo *evt)
+ {
+ SetCapture(m_hwnd);
+ m_bDragging = true;
+ m_hDragItem = evt->nmtv->itemNew.hItem;
+ m_menuItems.SelectItem(m_hDragItem);
+ }
+
+ int onMenuItemDraw(LPNMTVCUSTOMDRAW pNMTVCD)
+ {
+ if (pNMTVCD == NULL)
+ return -1;
+
+ switch (pNMTVCD->nmcd.dwDrawStage) {
+ case CDDS_PREPAINT:
+ return CDRF_NOTIFYITEMDRAW;
+
+ case CDDS_ITEMPREPAINT:
HTREEITEM hItem = (HTREEITEM)pNMTVCD->nmcd.dwItemSpec;
TCHAR buf[255];
- TVITEM tvi = { 0 };
+ TVITEMEX tvi = { 0 };
tvi.mask = TVIF_HANDLE | TVIF_PARAM | TVIS_SELECTED | TVIF_TEXT | TVIF_IMAGE;
tvi.stateMask = TVIS_SELECTED;
tvi.hItem = hItem;
tvi.pszText = buf;
tvi.cchTextMax = SIZEOF(buf);
- TreeView_GetItem(hWndTreeView, &tvi);
+ m_menuItems.GetItem(&tvi);
if (((MenuItemOptData *)tvi.lParam)->bIsSelected) {
pNMTVCD->clrTextBk = GetSysColor(COLOR_HIGHLIGHT);
pNMTVCD->clrText = GetSysColor(COLOR_HIGHLIGHTTEXT);
@@ -451,7 +533,7 @@ static int handleCustomDraw(HWND hWndTreeView, LPNMTVCUSTOMDRAW pNMTVCD)
and any subitems and return CDRF_NEWFONT. If the list-view control
is in report mode, you can simply return CDRF_NOTIFYSUBITEMREDRAW
to customize the item's subitems individually */
- int retVal = CDRF_NEWFONT;
+ int res = CDRF_NEWFONT;
if (tvi.iImage == -1) {
SIZE sz;
GetTextExtentPoint32(pNMTVCD->nmcd.hdc, tvi.pszText, (int)mir_tstrlen(tvi.pszText), &sz);
@@ -469,379 +551,190 @@ static int handleCustomDraw(HWND hWndTreeView, LPNMTVCUSTOMDRAW pNMTVCD)
DeleteObject(br);
DrawText(pNMTVCD->nmcd.hdc, tvi.pszText, -1, &pNMTVCD->nmcd.rc, DT_LEFT | DT_VCENTER | DT_NOPREFIX);
- retVal |= CDRF_SKIPDEFAULT;
+ res |= CDRF_SKIPDEFAULT;
}
-
- return retVal;
+ return res;
}
- }
- return 0;
-}
-
-static void OnClickCheckbox(HWND hwndDlg, HWND hwndTree, HTREEITEM hItem)
-{
- TVITEM tvi;
- tvi.mask = TVIF_HANDLE | TVIF_IMAGE | TVIF_SELECTEDIMAGE | TVIF_PARAM;
- tvi.hItem = hItem;
- TreeView_GetItem(hwndTree, &tvi);
-
- tvi.iImage = tvi.iSelectedImage = !tvi.iImage;
- ((MenuItemOptData *)tvi.lParam)->bShow = tvi.iImage != 0;
- TreeView_SetItem(hwndTree, &tvi);
- SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0);
-}
-static INT_PTR CALLBACK GenMenuOpts(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam)
-{
- struct OrderData *dat = (struct OrderData*)GetWindowLongPtr(GetDlgItem(hwndDlg, IDC_MENUITEMS), GWLP_USERDATA);
- LPNMHDR hdr;
-
- switch (msg) {
- case WM_INITDIALOG:
- TranslateDialogDefault(hwndDlg);
- dat = (struct OrderData*)mir_alloc(sizeof(struct OrderData));
- SetWindowLongPtr(GetDlgItem(hwndDlg, IDC_MENUITEMS), GWLP_USERDATA, (LONG_PTR)dat);
- dat->dragging = 0;
- dat->iInitMenuValue = db_get_b(NULL, "CList", "MoveProtoMenus", TRUE);
- mir_subclassWindow(GetDlgItem(hwndDlg, IDC_MENUITEMS), LBTNDOWNProc);
- {
- HIMAGELIST himlCheckBoxes;
- himlCheckBoxes = ImageList_Create(GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON), ILC_COLOR32 | ILC_MASK, 2, 2);
-
- ImageList_AddIcon_IconLibLoaded(himlCheckBoxes, SKINICON_OTHER_NOTICK);
- ImageList_AddIcon_IconLibLoaded(himlCheckBoxes, SKINICON_OTHER_TICK);
-
- TreeView_SetImageList(GetDlgItem(hwndDlg, IDC_MENUOBJECTS), himlCheckBoxes, TVSIL_NORMAL);
- TreeView_SetImageList(GetDlgItem(hwndDlg, IDC_MENUITEMS), himlCheckBoxes, TVSIL_NORMAL);
- }
- CheckDlgButton(hwndDlg, dat->iInitMenuValue ? IDC_RADIO2 : IDC_RADIO1, BST_CHECKED);
- CheckDlgButton(hwndDlg, IDC_DISABLEMENUICONS, bIconsDisabled ? BST_CHECKED : BST_UNCHECKED);
- BuildMenuObjectsTree(hwndDlg);
- return TRUE;
-
- case WM_COMMAND:
- if (HIWORD(wParam) == BN_CLICKED || HIWORD(wParam) == BN_DBLCLK) {
- switch (LOWORD(wParam)) {
- case IDC_INSERTSEPARATOR:
- InsertSeparator(hwndDlg);
- SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0);
- break;
-
- case IDC_RESETMENU:
- ResetMenuItems(hwndDlg);
- SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0);
- break;
-
- case IDC_DISABLEMENUICONS:
- case IDC_RADIO1:
- case IDC_RADIO2:
- SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0);
- break;
-
- case IDC_GENMENU_DEFAULT:
- {
- HTREEITEM hti = TreeView_GetSelection(GetDlgItem(hwndDlg, IDC_MENUITEMS));
- if (hti == NULL)
- break;
+ return 0;
+ }
- TVITEM tvi;
- tvi.mask = TVIF_HANDLE | TVIF_IMAGE | TVIF_SELECTEDIMAGE | TVIF_PARAM;
- tvi.hItem = hti;
- TreeView_GetItem(GetDlgItem(hwndDlg, IDC_MENUITEMS), &tvi);
- MenuItemOptData *iod = (MenuItemOptData *)tvi.lParam;
+ void OnClickCheckbox(HTREEITEM hItem)
+ {
+ TVITEMEX tvi;
+ tvi.mask = TVIF_HANDLE | TVIF_IMAGE | TVIF_SELECTEDIMAGE | TVIF_PARAM;
+ tvi.hItem = hItem;
+ m_menuItems.GetItem(&tvi);
- if (iod->name && _tcsstr(iod->name, STR_SEPARATOR))
- break;
+ tvi.iImage = tvi.iSelectedImage = !tvi.iImage;
+ ((MenuItemOptData *)tvi.lParam)->bShow = tvi.iImage != 0;
+ m_menuItems.SetItem(&tvi);
+
+ NotifyChange();
+ }
- if (iod->name)
- mir_free(iod->name);
- iod->name = mir_tstrdup(iod->defname);
+ virtual INT_PTR DlgProc(UINT msg, WPARAM wParam, LPARAM lParam)
+ {
+ TVHITTESTINFO hti;
- SaveTree(hwndDlg);
- RebuildCurrent(hwndDlg);
- SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0);
- }
+ switch (msg) {
+ case WM_MOUSEMOVE:
+ if (!m_bDragging)
break;
- case IDC_GENMENU_SET:
- {
- TCHAR buf[256];
-
- HTREEITEM hti = TreeView_GetSelection(GetDlgItem(hwndDlg, IDC_MENUITEMS));
- if (hti == NULL)
- break;
-
- TVITEM tvi;
- tvi.mask = TVIF_HANDLE | TVIF_IMAGE | TVIF_SELECTEDIMAGE | TVIF_PARAM;
- tvi.hItem = hti;
- SendDlgItemMessage(hwndDlg, IDC_MENUITEMS, TVM_GETITEM, 0, (LPARAM)&tvi);
-
- MenuItemOptData *iod = (MenuItemOptData *)tvi.lParam;
- if (iod->name && _tcsstr(iod->name, STR_SEPARATOR))
- break;
-
- buf[0] = 0;
- GetDlgItemText(hwndDlg, IDC_GENMENU_CUSTOMNAME, buf, SIZEOF(buf));
- if (iod->name)
- mir_free(iod->name);
-
- iod->name = mir_tstrdup(buf);
-
- SaveTree(hwndDlg);
- RebuildCurrent(hwndDlg);
- SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0);
- }
- break;
+ hti.pt.x = (short)LOWORD(lParam);
+ hti.pt.y = (short)HIWORD(lParam);
+ ClientToScreen(m_hwnd, &hti.pt);
+ ScreenToClient(m_menuItems.GetHwnd(), &hti.pt);
+ m_menuItems.HitTest(&hti);
+ if (hti.flags & (TVHT_ONITEM | TVHT_ONITEMRIGHT)) {
+ HTREEITEM it = hti.hItem;
+ hti.pt.y -= m_menuItems.GetItemHeight() / 2;
+ m_menuItems.HitTest(&hti);
+ if (!(hti.flags & TVHT_ABOVE))
+ m_menuItems.SetInsertMark(hti.hItem, 1);
+ else
+ m_menuItems.SetInsertMark(it, 0);
}
- }
- break;
-
- case WM_NOTIFY:
- hdr = (LPNMHDR)lParam;
- switch (hdr->idFrom) {
- case 0:
- if (hdr->code == PSN_APPLY) {
- bIconsDisabled = IsDlgButtonChecked(hwndDlg, IDC_DISABLEMENUICONS) != 0;
- db_set_b(NULL, "CList", "DisableMenuIcons", bIconsDisabled);
- SaveTree(hwndDlg);
- int iNewMenuValue = IsDlgButtonChecked(hwndDlg, IDC_RADIO1) ? 0 : 1;
- if (iNewMenuValue != dat->iInitMenuValue) {
- RebuildProtoMenus(iNewMenuValue);
- dat->iInitMenuValue = iNewMenuValue;
- }
- RebuildCurrent(hwndDlg);
+ else {
+ if (hti.flags & TVHT_ABOVE)
+ m_menuItems.SendMsg(WM_VSCROLL, MAKEWPARAM(SB_LINEUP, 0), 0);
+ if (hti.flags & TVHT_BELOW)
+ m_menuItems.SendMsg(WM_VSCROLL, MAKEWPARAM(SB_LINEDOWN, 0), 0);
+ m_menuItems.SetInsertMark(NULL, 0);
}
break;
- case IDC_MENUOBJECTS:
- if (hdr->code == TVN_SELCHANGED)
- RebuildCurrent(hwndDlg);
- break;
-
- case IDC_MENUITEMS:
- switch (hdr->code) {
- case NM_CUSTOMDRAW:
- SetWindowLongPtr(hwndDlg, DWLP_MSGRESULT, handleCustomDraw(GetDlgItem(hwndDlg, IDC_MENUITEMS), (LPNMTVCUSTOMDRAW)lParam));
- return TRUE;
-
- case TVN_BEGINDRAG:
- SetCapture(hwndDlg);
- dat->dragging = 1;
- dat->hDragItem = ((LPNMTREEVIEW)lParam)->itemNew.hItem;
- TreeView_SelectItem(GetDlgItem(hwndDlg, IDC_MENUITEMS), dat->hDragItem);
+ case WM_LBUTTONUP:
+ if (!m_bDragging)
break;
- case TVN_KEYDOWN:
- if (((LPNMLVKEYDOWN)lParam)->wVKey == VK_SPACE)
- OnClickCheckbox(hwndDlg, hdr->hwndFrom, TreeView_GetSelection(hdr->hwndFrom));
+ m_menuItems.SetInsertMark(NULL, 0);
+ m_bDragging = false;
+ ReleaseCapture();
+
+ hti.pt.x = (short)LOWORD(lParam);
+ hti.pt.y = (short)HIWORD(lParam);
+ ClientToScreen(m_hwnd, &hti.pt);
+ ScreenToClient(m_menuItems.GetHwnd(), &hti.pt);
+ hti.pt.y -= m_menuItems.GetItemHeight() / 2;
+ m_menuItems.HitTest(&hti);
+ if (hti.flags & TVHT_ABOVE)
+ hti.hItem = TVI_FIRST;
+ if (m_hDragItem == hti.hItem)
break;
+
+ m_hDragItem = NULL;
+ if (hti.flags & (TVHT_ONITEM | TVHT_ONITEMRIGHT) || (hti.hItem == TVI_FIRST)) {
+ HTREEITEM FirstItem = NULL;
+ if (m_menuItems.GetCount()) {
+ LIST<void> arItems(10);
- case NM_CLICK:
- {
- TVHITTESTINFO hti;
- hti.pt.x = (short)LOWORD(GetMessagePos());
- hti.pt.y = (short)HIWORD(GetMessagePos());
- ScreenToClient(hdr->hwndFrom, &hti.pt);
- if (TreeView_HitTest(hdr->hwndFrom, &hti)) {
- if (hti.flags & TVHT_ONITEMICON)
- OnClickCheckbox(hwndDlg, hdr->hwndFrom, hti.hItem);
-
- /*--------MultiSelection----------*/
- if (hti.flags & TVHT_ONITEMLABEL) {
- /// LabelClicked Set/unset selection
- TVITEM tvi;
- HWND tvw = hdr->hwndFrom;
+ HTREEITEM hit = m_menuItems.GetRoot();
+ if (hit) {
+ do {
+ TVITEMEX tvi = { 0 };
tvi.mask = TVIF_HANDLE | TVIF_PARAM;
- tvi.hItem = hti.hItem;
- TreeView_GetItem(tvw, &tvi);
- if (GetKeyState(VK_CONTROL) & 0x8000) {
- MenuItemOptData *iod = (MenuItemOptData*)tvi.lParam;
- iod->bIsSelected = !iod->bIsSelected;
- TreeView_SetItem(tvw, &tvi);
- }
- else if (GetKeyState(VK_SHIFT) & 0x8000) {
- ; // shifted click
- }
- else {
- // reset all selection except current
- HTREEITEM hit = TreeView_GetRoot(tvw);
- if (!hit)
- break;
-
- do {
- TVITEM tvi = { 0 };
- tvi.mask = TVIF_HANDLE | TVIF_PARAM;
- tvi.hItem = hit;
- TreeView_GetItem(tvw, &tvi);
-
- MenuItemOptData *iod = (MenuItemOptData*)tvi.lParam;
- iod->bIsSelected = (hti.hItem == hit);
- TreeView_SetItem(tvw, &tvi);
- } while (hit = TreeView_GetNextSibling(tvw, hit));
- }
- }
+ tvi.hItem = hit;
+ m_menuItems.GetItem(&tvi);
+ if (((MenuItemOptData *)tvi.lParam)->bIsSelected)
+ arItems.insert(tvi.hItem);
+ } while (hit = m_menuItems.GetNextSibling(hit));
+ }
+
+ // Proceed moving
+ HTREEITEM insertAfter = hti.hItem;
+ for (int i = 0; i < arItems.getCount(); i++) {
+ if (!insertAfter)
+ break;
+
+ insertAfter = MoveItemAbove((HTREEITEM)arItems[i], insertAfter);
+ if (!i)
+ FirstItem = insertAfter;
}
}
- break;
-
- case TVN_SELCHANGED:
- SetDlgItemTextA(hwndDlg, IDC_GENMENU_CUSTOMNAME, "");
- SetDlgItemTextA(hwndDlg, IDC_GENMENU_SERVICE, "");
-
- EnableWindow(GetDlgItem(hwndDlg, IDC_GENMENU_CUSTOMNAME), FALSE);
- EnableWindow(GetDlgItem(hwndDlg, IDC_GENMENU_DEFAULT), FALSE);
- EnableWindow(GetDlgItem(hwndDlg, IDC_GENMENU_SET), FALSE);
-
- HTREEITEM hti = TreeView_GetSelection(GetDlgItem(hwndDlg, IDC_MENUITEMS));
- if (hti == NULL)
- break;
-
- TVITEM tvi;
- tvi.mask = TVIF_HANDLE | TVIF_IMAGE | TVIF_SELECTEDIMAGE | TVIF_PARAM;
- tvi.hItem = hti;
- TreeView_GetItem(GetDlgItem(hwndDlg, IDC_MENUITEMS), &tvi);
- if (tvi.lParam == 0)
- break;
-
- MenuItemOptData *iod = (MenuItemOptData *)tvi.lParam;
- if (iod->name && _tcsstr(iod->name, STR_SEPARATOR))
- break;
-
- SetDlgItemText(hwndDlg, IDC_GENMENU_CUSTOMNAME, iod->name);
-
- if (iod->pimi->submenu.first == NULL && iod->uniqname)
- SetDlgItemTextA(hwndDlg, IDC_GENMENU_SERVICE, iod->uniqname);
-
- EnableWindow(GetDlgItem(hwndDlg, IDC_GENMENU_DEFAULT), mir_tstrcmp(iod->name, iod->defname) != 0);
- EnableWindow(GetDlgItem(hwndDlg, IDC_GENMENU_SET), TRUE);
- EnableWindow(GetDlgItem(hwndDlg, IDC_GENMENU_CUSTOMNAME), TRUE);
- break;
+ if (FirstItem)
+ m_menuItems.SelectItem(FirstItem);
+ NotifyChange();
+ SaveTree();
}
- }
- break;
+ break;
- case WM_MOUSEMOVE:
- if (!dat || !dat->dragging) break;
- {
- TVHITTESTINFO hti;
+ case WM_NOTIFY:
+ LPNMHDR phdr = (LPNMHDR)lParam;
+ if (phdr->idFrom == IDC_MENUITEMS) {
+ switch (phdr->code) {
+ case NM_CUSTOMDRAW:
+ SetWindowLongPtr(m_hwnd, DWLP_MSGRESULT, onMenuItemDraw((LPNMTVCUSTOMDRAW)phdr));
+ return TRUE;
+
+ case TVN_KEYDOWN:
+ if (((LPNMLVKEYDOWN)phdr)->wVKey == VK_SPACE)
+ OnClickCheckbox(m_menuItems.GetSelection());
+ break;
- hti.pt.x = (short)LOWORD(lParam);
- hti.pt.y = (short)HIWORD(lParam);
- ClientToScreen(hwndDlg, &hti.pt);
- ScreenToClient(GetDlgItem(hwndDlg, IDC_MENUITEMS), &hti.pt);
- TreeView_HitTest(GetDlgItem(hwndDlg, IDC_MENUITEMS), &hti);
- if (hti.flags&(TVHT_ONITEM | TVHT_ONITEMRIGHT)) {
- HTREEITEM it = hti.hItem;
- hti.pt.y -= TreeView_GetItemHeight(GetDlgItem(hwndDlg, IDC_MENUITEMS)) / 2;
- TreeView_HitTest(GetDlgItem(hwndDlg, IDC_MENUITEMS), &hti);
- if (!(hti.flags&TVHT_ABOVE))
- TreeView_SetInsertMark(GetDlgItem(hwndDlg, IDC_MENUITEMS), hti.hItem, 1);
- else
- TreeView_SetInsertMark(GetDlgItem(hwndDlg, IDC_MENUITEMS), it, 0);
- }
- else {
- if (hti.flags&TVHT_ABOVE) SendDlgItemMessage(hwndDlg, IDC_MENUITEMS, WM_VSCROLL, MAKEWPARAM(SB_LINEUP, 0), 0);
- if (hti.flags&TVHT_BELOW) SendDlgItemMessage(hwndDlg, IDC_MENUITEMS, WM_VSCROLL, MAKEWPARAM(SB_LINEDOWN, 0), 0);
- TreeView_SetInsertMark(GetDlgItem(hwndDlg, IDC_MENUITEMS), NULL, 0);
- }
- }
- break;
+ case NM_CLICK:
+ TVHITTESTINFO hti;
+ hti.pt.x = (short)LOWORD(GetMessagePos());
+ hti.pt.y = (short)HIWORD(GetMessagePos());
+ ScreenToClient(phdr->hwndFrom, &hti.pt);
+ if (!m_menuItems.HitTest(&hti))
+ break;
- case WM_LBUTTONUP:
- if (!dat->dragging)
- break;
+ if (hti.flags & TVHT_ONITEMICON)
+ OnClickCheckbox(hti.hItem);
+
+ /*--------MultiSelection----------*/
+ if (hti.flags & TVHT_ONITEMLABEL) {
+ /// LabelClicked Set/unset selection
+ TVITEMEX tvi;
+ tvi.mask = TVIF_HANDLE | TVIF_PARAM;
+ tvi.hItem = hti.hItem;
+ m_menuItems.GetItem(&tvi);
+ if (GetKeyState(VK_CONTROL) & 0x8000) {
+ MenuItemOptData *iod = (MenuItemOptData*)tvi.lParam;
+ iod->bIsSelected = !iod->bIsSelected;
+ m_menuItems.SetItem(&tvi);
+ }
+ else if (GetKeyState(VK_SHIFT) & 0x8000) {
+ ; // shifted click
+ }
+ else {
+ // reset all selection except current
+ HTREEITEM hit = m_menuItems.GetRoot();
+ if (!hit)
+ break;
- TreeView_SetInsertMark(GetDlgItem(hwndDlg, IDC_MENUITEMS), NULL, 0);
- dat->dragging = 0;
- ReleaseCapture();
- {
- TVHITTESTINFO hti;
- hti.pt.x = (short)LOWORD(lParam);
- hti.pt.y = (short)HIWORD(lParam);
- ClientToScreen(hwndDlg, &hti.pt);
- ScreenToClient(GetDlgItem(hwndDlg, IDC_MENUITEMS), &hti.pt);
- hti.pt.y -= TreeView_GetItemHeight(GetDlgItem(hwndDlg, IDC_MENUITEMS)) / 2;
- TreeView_HitTest(GetDlgItem(hwndDlg, IDC_MENUITEMS), &hti);
- if (hti.flags&TVHT_ABOVE) hti.hItem = TVI_FIRST;
- if (dat->hDragItem == hti.hItem) break;
- dat->hDragItem = NULL;
- if (hti.flags&(TVHT_ONITEM | TVHT_ONITEMRIGHT) || (hti.hItem == TVI_FIRST)) {
- HTREEITEM FirstItem = NULL;
- HWND tvw = GetDlgItem(hwndDlg, IDC_MENUITEMS);
- UINT uITCnt = TreeView_GetCount(tvw);
- UINT uSic = 0;
- if (uITCnt) {
- HTREEITEM *pSIT = (HTREEITEM *)mir_alloc(sizeof(HTREEITEM)*uITCnt);
- if (pSIT) {
- HTREEITEM hit = TreeView_GetRoot(tvw);
- if (hit) {
do {
- TVITEM tvi = { 0 };
+ TVITEMEX tvi = { 0 };
tvi.mask = TVIF_HANDLE | TVIF_PARAM;
tvi.hItem = hit;
- TreeView_GetItem(tvw, &tvi);
- if (((MenuItemOptData *)tvi.lParam)->bIsSelected) {
- pSIT[uSic] = tvi.hItem;
- uSic++;
- }
- } while (hit = TreeView_GetNextSibling(tvw, hit));
- }
- // Proceed moving
- HTREEITEM insertAfter = hti.hItem;
- for (UINT i = 0; i < uSic; i++) {
- if (insertAfter) insertAfter = MoveItemAbove(tvw, pSIT[i], insertAfter);
- else break;
- if (!i) FirstItem = insertAfter;
+ m_menuItems.GetItem(&tvi);
+
+ MenuItemOptData *iod = (MenuItemOptData*)tvi.lParam;
+ iod->bIsSelected = (hti.hItem == hit);
+ m_menuItems.SetItem(&tvi);
+ } while (hit = m_menuItems.GetNextSibling(hit));
}
-
- // free pointers...
- mir_free(pSIT);
}
}
-
- if (FirstItem)
- TreeView_SelectItem(tvw, FirstItem);
- SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0);
- SaveTree(hwndDlg);
}
+ break;
}
- break;
-
- case WM_DESTROY:
- if (dat)
- mir_free(dat);
-
- ImageList_Destroy(TreeView_SetImageList(GetDlgItem(hwndDlg, IDC_MENUOBJECTS), NULL, TVSIL_NORMAL));
- FreeTreeData(hwndDlg);
- break;
-
+ return CDlgBase::DlgProc(msg, wParam, lParam);
}
- return FALSE;
-}
-
-INT_PTR CALLBACK ProtocolOrderOpts(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam);
+};
int GenMenuOptInit(WPARAM wParam, LPARAM)
{
OPTIONSDIALOGPAGE odp = { 0 };
- odp.hInstance = hInst;
-
odp.position = -1000000000;
- odp.pszTemplate = MAKEINTRESOURCEA(IDD_OPT_GENMENU);
odp.pszTitle = LPGEN("Menus");
odp.pszGroup = LPGEN("Customize");
- odp.pfnDlgProc = GenMenuOpts;
- odp.flags = ODPF_BOLDGROUPS;
- Options_AddPage(wParam, &odp);
-
- odp.position = -10000000;
- odp.groupPosition = 1000000;
- odp.pszTemplate = MAKEINTRESOURCEA(IDD_OPT_PROTOCOLORDER);
- odp.pszTitle = LPGEN("Accounts");
- odp.pszGroup = LPGEN("Contact list");
- odp.pfnDlgProc = ProtocolOrderOpts;
odp.flags = ODPF_BOLDGROUPS;
+ odp.pDialog = new CGenMenuOptionsPage();
Options_AddPage(wParam, &odp);
- return 0;
+
+ return ProtocolOrderOptInit(wParam, 0);
}
diff --git a/src/modules/clist/keyboard.cpp b/src/modules/clist/keyboard.cpp
index 36cd20f270..343d7906ef 100644
--- a/src/modules/clist/keyboard.cpp
+++ b/src/modules/clist/keyboard.cpp
@@ -31,17 +31,7 @@ static INT_PTR hkHideShow(WPARAM, LPARAM)
cli.pfnShowHide(0, 0);
return 0;
}
-/*
-INT_PTR hkSearch(WPARAM wParam, LPARAM lParam)
-{
- DBVARIANT dbv = {0};
- if (!db_get_s(NULL, "CList", "SearchUrl", &dbv)) {
- CallService(MS_UTILS_OPENURL, db_get_b(NULL, "CList", "HKSearchNewWnd", 0), (LPARAM)dbv.pszVal);
- db_free(&dbv);
- }
- return 0;
-}
-*/
+
static INT_PTR hkRead(WPARAM, LPARAM)
{
if (cli.pfnEventsProcessTrayDoubleClick(0) == 0) return TRUE;
@@ -55,26 +45,7 @@ static INT_PTR hkOpts(WPARAM, LPARAM)
CallService("Options/OptionsCommand", 0, 0);
return 0;
}
-/*
-static INT_PTR hkCloseMiranda(WPARAM wParam, LPARAM lParam)
-{
- CallService("CloseAction", 0, 0);
- return 0;
-}
-
-INT_PTR hkRestoreStatus(WPARAM wParam, LPARAM lParam)
-{
- int nStatus = db_get_w(NULL, "CList", "Status", ID_STATUS_OFFLINE);
- CallService(MS_CLIST_SETSTATUSMODE, nStatus, 0);
- return 0;
-}
-static INT_PTR hkAllOffline(WPARAM, LPARAM)
-{
- CallService(MS_CLIST_SETSTATUSMODE, ID_STATUS_OFFLINE, 0);
- return 0;
-}
-*/
int InitClistHotKeys(void)
{
CreateServiceFunction("CLIST/HK/SHOWHIDE", hkHideShow);
@@ -96,14 +67,7 @@ int InitClistHotKeys(void)
shk.pszService = "CLIST/HK/Read";
shk.DefHotKey = HOTKEYCODE(HOTKEYF_CONTROL|HOTKEYF_SHIFT, 'I');
Hotkey_Register(&shk);
-/*
- shk.pszDescription = "Search in site";
- shk.pszName = "SearchInWeb";
- shk.pszSection = "Main";
- shk.pszService = "CLIST/HK/Search";
- shk.DefHotKey = 846;
- Hotkey_Register(&shk);
-*/
+
shk.ptszDescription = LPGENT("Open Options page");
shk.pszName = "ShowOptions";
shk.ptszSection = _T("Main");
@@ -124,29 +88,6 @@ int InitClistHotKeys(void)
shk.pszService = "FindAdd/FindAddCommand";
shk.DefHotKey = HOTKEYCODE(HOTKEYF_CONTROL|HOTKEYF_SHIFT, 'F') | HKF_MIRANDA_LOCAL;
Hotkey_Register(&shk);
-
-/*
- shk.pszDescription = "Close Miranda";
- shk.pszName = "CloseMiranda";
- shk.pszSection = "Main";
- shk.pszService = "CLIST/HK/CloseMiranda";
- shk.DefHotKey = 0;
- Hotkey_Register(&shk);
-
- shk.pszDescription = "Restore last status";
- shk.pszName = "RestoreLastStatus";
- shk.pszSection = "Status";
- shk.pszService = "CLIST/HK/RestoreStatus";
- shk.DefHotKey = 0;
- Hotkey_Register(&shk);
-
- shk.pszDescription = "Set All Offline";
- shk.pszName = "AllOffline";
- shk.pszSection = "Status";
- shk.pszService = "CLIST/HK/AllOffline";
- shk.DefHotKey = 0;
- Hotkey_Register(&shk);
-*/
return 0;
}
diff --git a/src/modules/clist/protocolorder.cpp b/src/modules/clist/protocolorder.cpp
index 9a1e02b02b..bab4380b61 100644
--- a/src/modules/clist/protocolorder.cpp
+++ b/src/modules/clist/protocolorder.cpp
@@ -25,25 +25,12 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#include "..\..\core\commonheaders.h"
#include "clc.h"
-typedef struct tagProtocolData
+struct ProtocolData
{
char *RealName;
int show, enabled;
-}
- ProtocolData;
-
-struct ProtocolOrderData
-{
- int dragging;
- HTREEITEM hDragItem;
};
-typedef struct {
- char* protoName;
- int visible;
-}
- tempProtoItem;
-
int isProtoSuitable(PROTO_INTERFACE* ppi)
{
if (ppi == NULL)
@@ -59,14 +46,14 @@ bool CheckProtocolOrder(void)
for (;;) {
// Find account with this id
- for (i=0; i < accounts.getCount(); i++)
+ for (i = 0; i < accounts.getCount(); i++)
if (accounts[i]->iOrder == id) break;
// Account with id not found
if (i == accounts.getCount()) {
// Check if this is skipped id, if it is decrement all other ids
bool found = false;
- for (i=0; i < accounts.getCount(); i++) {
+ for (i = 0; i < accounts.getCount(); i++) {
if (accounts[i]->iOrder < 1000000 && accounts[i]->iOrder > id) {
--accounts[i]->iOrder;
found = true;
@@ -80,7 +67,7 @@ bool CheckProtocolOrder(void)
if (id < accounts.getCount()) {
// Remove huge ids
- for (i=0; i < accounts.getCount(); i++)
+ for (i = 0; i < accounts.getCount(); i++)
if (accounts[i]->iOrder >= 1000000)
accounts[i]->iOrder = id++;
@@ -89,7 +76,7 @@ bool CheckProtocolOrder(void)
if (id < accounts.getCount()) {
// Remove duplicate ids
- for (i=0; i < accounts.getCount(); i++) {
+ for (i = 0; i < accounts.getCount(); i++) {
bool found = false;
for (int j = 0; j < accounts.getCount(); j++) {
if (accounts[j]->iOrder == i) {
@@ -113,233 +100,248 @@ static bool ProtoToInclude(PROTOACCOUNT *pa)
return (pd != NULL && pd->type == PROTOTYPE_PROTOCOL);
}
-static int FillTree(HWND hwnd)
+/////////////////////////////////////////////////////////////////////////////////////////
+
+class CProtocolOrderOpts : public CDlgBase
{
- TVINSERTSTRUCT tvis;
- tvis.hParent = NULL;
- tvis.hInsertAfter = TVI_LAST;
- tvis.item.mask = TVIF_PARAM|TVIF_TEXT|TVIF_IMAGE|TVIF_SELECTEDIMAGE;
-
- TreeView_DeleteAllItems(hwnd);
- if (accounts.getCount() == 0)
- return FALSE;
-
- for (int i=0; i < accounts.getCount(); i++) {
- int idx = cli.pfnGetAccountIndexByPos(i);
- if (idx == -1)
- continue;
-
- PROTOACCOUNT *pa = accounts[idx];
- if (!ProtoToInclude(pa))
- continue;
-
- ProtocolData *PD = (ProtocolData*)mir_alloc(sizeof(ProtocolData));
- PD->RealName = pa->szModuleName;
- PD->enabled = Proto_IsAccountEnabled(pa) && isProtoSuitable(pa->ppro);
- PD->show = PD->enabled ? pa->bIsVisible : 100;
-
- tvis.item.lParam = (LPARAM)PD;
- tvis.item.pszText = pa->tszAccountName;
- tvis.item.iImage = tvis.item.iSelectedImage = PD->show;
- TreeView_InsertItem(hwnd, &tvis);
+ void FillTree()
+ {
+ m_order.DeleteAllItems();
+
+ TVINSERTSTRUCT tvis;
+ tvis.hParent = NULL;
+ tvis.hInsertAfter = TVI_LAST;
+ tvis.item.mask = TVIF_PARAM | TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE;
+
+ for (int i = 0; i < accounts.getCount(); i++) {
+ int idx = cli.pfnGetAccountIndexByPos(i);
+ if (idx == -1)
+ continue;
+
+ PROTOACCOUNT *pa = accounts[idx];
+ if (!ProtoToInclude(pa))
+ continue;
+
+ ProtocolData *PD = (ProtocolData*)mir_alloc(sizeof(ProtocolData));
+ PD->RealName = pa->szModuleName;
+ PD->enabled = Proto_IsAccountEnabled(pa) && isProtoSuitable(pa->ppro);
+ PD->show = PD->enabled ? pa->bIsVisible : 100;
+
+ tvis.item.lParam = (LPARAM)PD;
+ tvis.item.pszText = pa->tszAccountName;
+ tvis.item.iImage = tvis.item.iSelectedImage = PD->show;
+ m_order.InsertItem(&tvis);
+ }
}
- return 0;
-}
+ bool m_bDragging;
+ HTREEITEM m_hDragItem;
-INT_PTR CALLBACK ProtocolOrderOpts(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam)
-{
- HWND hwndProtoOrder = GetDlgItem(hwndDlg, IDC_PROTOCOLORDER);
- struct ProtocolOrderData *dat = (ProtocolOrderData*)GetWindowLongPtr(hwndProtoOrder, GWLP_USERDATA);
-
- switch (msg) {
- case WM_INITDIALOG:
- TranslateDialogDefault(hwndDlg);
- dat = (ProtocolOrderData*)mir_calloc(sizeof(ProtocolOrderData));
- SetWindowLongPtr(hwndProtoOrder, GWLP_USERDATA, (LONG_PTR)dat);
- dat->dragging = 0;
-
- SetWindowLongPtr(hwndProtoOrder, GWL_STYLE, GetWindowLongPtr(hwndProtoOrder, GWL_STYLE) | TVS_NOHSCROLL);
- {
- HIMAGELIST himlCheckBoxes = ImageList_Create(GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON), ILC_COLOR32|ILC_MASK, 2, 2);
- ImageList_AddIcon_IconLibLoaded(himlCheckBoxes, SKINICON_OTHER_NOTICK);
- ImageList_AddIcon_IconLibLoaded(himlCheckBoxes, SKINICON_OTHER_TICK);
- TreeView_SetImageList(hwndProtoOrder, himlCheckBoxes, TVSIL_NORMAL);
- }
+ CCtrlTreeView m_order;
+ CCtrlButton m_btnReset;
- FillTree(hwndProtoOrder);
- return TRUE;
+public:
+ CProtocolOrderOpts() :
+ CDlgBase(hInst, IDD_OPT_PROTOCOLORDER),
+ m_order(this, IDC_PROTOCOLORDER),
+ m_btnReset(this, IDC_RESETPROTOCOLDATA),
+ m_bDragging(false),
+ m_hDragItem(NULL)
+ {
+ m_btnReset.OnClick = Callback(this, &CProtocolOrderOpts::onReset_Click);
+
+ m_order.OnBeginDrag = Callback(this, &CProtocolOrderOpts::onOrder_BeginDrag);
+ m_order.OnDeleteItem = Callback(this, &CProtocolOrderOpts::onOrder_DeleteItem);
+ }
- case WM_COMMAND:
- if (LOWORD(wParam) == IDC_RESETPROTOCOLDATA && HIWORD(wParam) == BN_CLICKED) {
- for (int i=0; i < accounts.getCount(); i++)
- accounts[i]->iOrder = i;
+ virtual void OnInitDialog()
+ {
+ HIMAGELIST himlCheckBoxes = ImageList_Create(GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON), ILC_COLOR32 | ILC_MASK, 2, 2);
+ ImageList_AddIcon_IconLibLoaded(himlCheckBoxes, SKINICON_OTHER_NOTICK);
+ ImageList_AddIcon_IconLibLoaded(himlCheckBoxes, SKINICON_OTHER_TICK);
+ m_order.SetImageList(himlCheckBoxes, TVSIL_NORMAL);
- FillTree(hwndProtoOrder);
- SendMessage(GetParent(hwndDlg), PSM_CHANGED, (WPARAM)hwndDlg, 0);
- }
- break;
-
- case WM_NOTIFY:
- switch(((LPNMHDR)lParam)->idFrom) {
- case 0:
- if (((LPNMHDR)lParam)->code == PSN_APPLY) {
- int idx = 0;
-
- TVITEM tvi;
- tvi.hItem = TreeView_GetRoot(hwndProtoOrder);
- tvi.cchTextMax = 32;
- tvi.mask = TVIF_PARAM | TVIF_HANDLE;
-
- while (tvi.hItem != NULL) {
- TreeView_GetItem(hwndProtoOrder, &tvi);
-
- if (tvi.lParam != 0) {
- ProtocolData* ppd = (ProtocolData*)tvi.lParam;
- PROTOACCOUNT *pa = Proto_GetAccount(ppd->RealName);
- if (pa != NULL) {
- while (idx < accounts.getCount() && !ProtoToInclude(accounts[idx])) idx++;
- pa->iOrder = idx++;
- if (ppd->enabled)
- pa->bIsVisible = ppd->show != 0;
- }
- }
+ FillTree();
+ }
- tvi.hItem = TreeView_GetNextSibling(hwndProtoOrder, tvi.hItem);
+ virtual void OnApply()
+ {
+ int idx = 0;
+
+ TVITEMEX tvi;
+ tvi.hItem = m_order.GetRoot();
+ tvi.mask = TVIF_PARAM | TVIF_HANDLE;
+ while (tvi.hItem != NULL) {
+ m_order.GetItem(&tvi);
+
+ if (tvi.lParam != 0) {
+ ProtocolData *ppd = (ProtocolData*)tvi.lParam;
+ PROTOACCOUNT *pa = Proto_GetAccount(ppd->RealName);
+ if (pa != NULL) {
+ while (idx < accounts.getCount() && !ProtoToInclude(accounts[idx]))
+ idx++;
+ pa->iOrder = idx++;
+ if (ppd->enabled)
+ pa->bIsVisible = ppd->show != 0;
}
-
- WriteDbAccounts();
- cli.pfnReloadProtoMenus();
- cli.pfnTrayIconIconsChanged();
- cli.pfnClcBroadcast(INTM_RELOADOPTIONS, 0, 0);
- cli.pfnClcBroadcast(INTM_INVALIDATE, 0, 0);
}
- break;
- case IDC_PROTOCOLORDER:
- switch (((LPNMHDR)lParam)->code) {
- case TVN_DELETEITEM:
- {
- NMTREEVIEWA * pnmtv = (NMTREEVIEWA *) lParam;
- if (pnmtv && pnmtv->itemOld.lParam)
- mir_free((ProtocolData*)pnmtv->itemOld.lParam);
- }
- break;
+ tvi.hItem = m_order.GetNextSibling(tvi.hItem);
+ }
- case TVN_BEGINDRAG:
- SetCapture(hwndDlg);
- dat->dragging = 1;
- dat->hDragItem = ((LPNMTREEVIEW)lParam)->itemNew.hItem;
- TreeView_SelectItem(hwndProtoOrder, dat->hDragItem);
- break;
+ WriteDbAccounts();
+ cli.pfnReloadProtoMenus();
+ cli.pfnTrayIconIconsChanged();
+ cli.pfnClcBroadcast(INTM_RELOADOPTIONS, 0, 0);
+ cli.pfnClcBroadcast(INTM_INVALIDATE, 0, 0);
+ }
+ virtual void OnDestroy()
+ {
+ ImageList_Destroy(m_order.GetImageList(TVSIL_NORMAL));
+ }
+
+ void onReset_Click(CCtrlButton*)
+ {
+ for (int i = 0; i < accounts.getCount(); i++)
+ accounts[i]->iOrder = i;
+
+ FillTree();
+ NotifyChange();
+ }
+
+ void onOrder_DeleteItem(CCtrlTreeView::TEventInfo *env)
+ {
+ NMTREEVIEW *pnmtv = env->nmtv;
+ if (pnmtv)
+ mir_free((ProtocolData*)pnmtv->itemOld.lParam);
+ }
+
+ void onOrder_BeginDrag(CCtrlTreeView::TEventInfo *env)
+ {
+ SetCapture(m_hwnd);
+ m_bDragging = true;
+ m_hDragItem = env->nmtv->itemNew.hItem;
+ m_order.SelectItem(m_hDragItem);
+ }
+
+ virtual INT_PTR DlgProc(UINT msg, WPARAM wParam, LPARAM lParam)
+ {
+ TVHITTESTINFO hti;
+
+ switch (msg) {
+ case WM_NOTIFY:
+ switch (((LPNMHDR)lParam)->code) {
case NM_CLICK:
- {
- TVHITTESTINFO hti;
- hti.pt.x = (short)LOWORD(GetMessagePos());
- hti.pt.y = (short)HIWORD(GetMessagePos());
- ScreenToClient(((LPNMHDR)lParam)->hwndFrom, &hti.pt);
- if (TreeView_HitTest(((LPNMHDR)lParam)->hwndFrom, &hti)) {
- if (hti.flags & TVHT_ONITEMICON) {
- TVITEMA tvi;
- tvi.mask = TVIF_HANDLE|TVIF_IMAGE|TVIF_SELECTEDIMAGE;
- tvi.hItem = hti.hItem;
- TreeView_GetItem(((LPNMHDR)lParam)->hwndFrom, &tvi);
-
- ProtocolData *pData = (ProtocolData*)tvi.lParam;
- if (pData->enabled) {
- tvi.iImage = tvi.iSelectedImage = !tvi.iImage;
- pData->show = tvi.iImage;
- TreeView_SetItem(((LPNMHDR)lParam)->hwndFrom, &tvi);
- SendMessage(GetParent(hwndDlg), PSM_CHANGED, (WPARAM)hwndDlg, 0);
- }
+ hti.pt.x = (short)LOWORD(GetMessagePos());
+ hti.pt.y = (short)HIWORD(GetMessagePos());
+ ScreenToClient(((LPNMHDR)lParam)->hwndFrom, &hti.pt);
+ if (m_order.HitTest(&hti)) {
+ if (hti.flags & TVHT_ONITEMICON) {
+ TVITEMEX tvi;
+ tvi.mask = TVIF_HANDLE | TVIF_IMAGE | TVIF_SELECTEDIMAGE;
+ tvi.hItem = hti.hItem;
+ m_order.GetItem(&tvi);
+
+ ProtocolData *pData = (ProtocolData*)tvi.lParam;
+ if (pData->enabled) {
+ tvi.iImage = tvi.iSelectedImage = !tvi.iImage;
+ pData->show = tvi.iImage;
+ m_order.SetItem(&tvi);
+ NotifyChange();
}
}
}
}
break;
- }
- break;
- case WM_MOUSEMOVE:
- if (dat->dragging) {
- TVHITTESTINFO hti;
+ case WM_MOUSEMOVE:
+ if (!m_bDragging)
+ break;
+
hti.pt.x = (short)LOWORD(lParam);
hti.pt.y = (short)HIWORD(lParam);
- ClientToScreen(hwndDlg, &hti.pt);
- ScreenToClient(hwndProtoOrder, &hti.pt);
- TreeView_HitTest(hwndProtoOrder, &hti);
- if (hti.flags & (TVHT_ONITEM|TVHT_ONITEMRIGHT)) {
+ ClientToScreen(m_hwnd, &hti.pt);
+ ScreenToClient(m_order.GetHwnd(), &hti.pt);
+ m_order.HitTest(&hti);
+ if (hti.flags & (TVHT_ONITEM | TVHT_ONITEMRIGHT)) {
HTREEITEM it = hti.hItem;
- hti.pt.y -= TreeView_GetItemHeight(hwndProtoOrder) / 2;
- TreeView_HitTest(hwndProtoOrder, &hti);
+ hti.pt.y -= m_order.GetItemHeight() / 2;
+ m_order.HitTest(&hti);
if (!(hti.flags & TVHT_ABOVE))
- TreeView_SetInsertMark(hwndProtoOrder, hti.hItem, 1);
+ m_order.SetInsertMark(hti.hItem, 1);
else
- TreeView_SetInsertMark(hwndProtoOrder, it, 0);
+ m_order.SetInsertMark(it, 0);
}
else {
- if (hti.flags&TVHT_ABOVE) SendMessage(hwndProtoOrder, WM_VSCROLL, MAKEWPARAM(SB_LINEUP, 0), 0);
- if (hti.flags&TVHT_BELOW) SendMessage(hwndProtoOrder, WM_VSCROLL, MAKEWPARAM(SB_LINEDOWN, 0), 0);
- TreeView_SetInsertMark(hwndProtoOrder, NULL, 0);
+ if (hti.flags & TVHT_ABOVE) m_order.SendMsg(WM_VSCROLL, MAKEWPARAM(SB_LINEUP, 0), 0);
+ if (hti.flags & TVHT_BELOW) m_order.SendMsg(WM_VSCROLL, MAKEWPARAM(SB_LINEDOWN, 0), 0);
+ m_order.SetInsertMark(NULL, 0);
}
- }
- break;
+ break;
- case WM_LBUTTONUP:
- if (dat->dragging) {
- TreeView_SetInsertMark(hwndProtoOrder, NULL, 0);
- dat->dragging = 0;
+ case WM_LBUTTONUP:
+ if (!m_bDragging)
+ break;
+
+ m_order.SetInsertMark(NULL, 0);
+ m_bDragging = false;
ReleaseCapture();
- TVHITTESTINFO hti;
hti.pt.x = (short)LOWORD(lParam);
hti.pt.y = (short)HIWORD(lParam);
- ClientToScreen(hwndDlg, &hti.pt);
- ScreenToClient(hwndProtoOrder, &hti.pt);
- hti.pt.y -= TreeView_GetItemHeight(hwndProtoOrder) / 2;
- TreeView_HitTest(hwndProtoOrder, &hti);
- if (dat->hDragItem == hti.hItem) break;
+ ClientToScreen(m_hwnd, &hti.pt);
+ ScreenToClient(m_order.GetHwnd(), &hti.pt);
+ hti.pt.y -= m_order.GetItemHeight() / 2;
+ m_order.HitTest(&hti);
+ if (m_hDragItem == hti.hItem)
+ break;
if (hti.flags & TVHT_ABOVE)
hti.hItem = TVI_FIRST;
- TVITEM tvi;
- tvi.mask = TVIF_HANDLE|TVIF_PARAM;
- tvi.hItem = dat->hDragItem;
- TreeView_GetItem(hwndProtoOrder, &tvi);
+ TVITEMEX tvi;
+ tvi.mask = TVIF_HANDLE | TVIF_PARAM;
+ tvi.hItem = m_hDragItem;
+ m_order.GetItem(&tvi);
if (hti.flags & (TVHT_ONITEM | TVHT_ONITEMRIGHT) || (hti.hItem == TVI_FIRST)) {
- TVINSERTSTRUCT tvis;
TCHAR name[128];
- ProtocolData * lpOldData;
- tvis.item.mask = TVIF_HANDLE|TVIF_PARAM|TVIF_TEXT|TVIF_IMAGE|TVIF_SELECTEDIMAGE;
- tvis.item.stateMask = 0xFFFFFFFF;
- tvis.item.pszText = name;
- tvis.item.cchTextMax = SIZEOF(name);
- tvis.item.hItem = dat->hDragItem;
- tvis.item.iImage = tvis.item.iSelectedImage = ((ProtocolData *)tvi.lParam)->show;
- TreeView_GetItem(hwndProtoOrder, &tvis.item);
-
- //the pointed lParam will be freed inside TVN_DELETEITEM
- //so lets substitute it with 0
- lpOldData = (ProtocolData *)tvis.item.lParam;
- tvis.item.lParam = 0;
- TreeView_SetItem(hwndProtoOrder, &tvis.item);
- tvis.item.lParam = (LPARAM)lpOldData;
-
- //now current item contain lParam = 0 we can delete it. the memory will be kept.
- TreeView_DeleteItem(hwndProtoOrder, dat->hDragItem);
+ TVINSERTSTRUCT tvis;
+ tvis.itemex.mask = TVIF_HANDLE | TVIF_PARAM | TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE;
+ tvis.itemex.stateMask = 0xFFFFFFFF;
+ tvis.itemex.pszText = name;
+ tvis.itemex.cchTextMax = SIZEOF(name);
+ tvis.itemex.hItem = m_hDragItem;
+ tvis.itemex.iImage = tvis.itemex.iSelectedImage = ((ProtocolData *)tvi.lParam)->show;
+ m_order.GetItem(&tvis.itemex);
+
+ // the pointed lParam will be freed inside TVN_DELETEITEM
+ // so lets substitute it with 0
+ ProtocolData *lpOldData = (ProtocolData*)tvis.itemex.lParam;
+ tvis.itemex.lParam = 0;
+ m_order.SetItem(&tvis.itemex);
+
+ // now current item contain lParam = 0 we can delete it. the memory will be kept.
+ tvis.itemex.lParam = (LPARAM)lpOldData;
+ m_order.DeleteItem(m_hDragItem);
tvis.hParent = NULL;
tvis.hInsertAfter = hti.hItem;
- TreeView_SelectItem(hwndProtoOrder, TreeView_InsertItem(hwndProtoOrder, &tvis));
- SendMessage(GetParent(hwndDlg), PSM_CHANGED, (WPARAM)hwndDlg, 0);
+ m_order.SelectItem(m_order.InsertItem(&tvis));
+ NotifyChange();
}
}
- break;
-
- case WM_DESTROY:
- ImageList_Destroy(TreeView_GetImageList(hwndProtoOrder, TVSIL_NORMAL));
- mir_free(dat);
- break;
+ return CDlgBase::DlgProc(msg, wParam, lParam);
}
- return FALSE;
+};
+
+int ProtocolOrderOptInit(WPARAM wParam, LPARAM)
+{
+ OPTIONSDIALOGPAGE odp = { 0 };
+ odp.position = -10000000;
+ odp.groupPosition = 1000000;
+ odp.pszTitle = LPGEN("Accounts");
+ odp.pszGroup = LPGEN("Contact list");
+ odp.pDialog = new CProtocolOrderOpts();
+ odp.flags = ODPF_BOLDGROUPS;
+ Options_AddPage(wParam, &odp);
+ return 0;
}
diff --git a/src/resource.rc b/src/resource.rc
index 55f77c2695..ddc553de57 100644
--- a/src/resource.rc
+++ b/src/resource.rc
@@ -511,7 +511,7 @@ FONT 8, "MS Shell Dlg", 0, 0, 0x1
BEGIN
CTEXT "Show accounts in the following order,\ndrag to choose another order:",IDC_STATIC,78,11,150,25
GROUPBOX "Account order and visibility",IDC_STATIC,0,0,314,241,0,WS_EX_TRANSPARENT
- CONTROL "Tree1",IDC_PROTOCOLORDER,"SysTreeView32",TVS_NOTOOLTIPS | WS_BORDER | WS_HSCROLL | WS_TABSTOP,78,37,151,153
+ CONTROL "Tree1",IDC_PROTOCOLORDER,"SysTreeView32",TVS_NOTOOLTIPS | TVS_NOHSCROLL | WS_BORDER | WS_TABSTOP,78,37,151,153
PUSHBUTTON "Reset",IDC_RESETPROTOCOLDATA,96,193,115,14,BS_NOTIFY
CTEXT "Note: Miranda NG will have to be restarted for changes to take effect.",IDC_PROTOCOLORDERWARNING,13,216,280,16
END