Beispiel #1
0
MIR_CORE_DLL(int) TimeZone_SelectListItem(MCONTACT hContact, LPCSTR szModule, HWND hWnd, DWORD dwFlags)
{
	const ListMessages *lstMsg = GetListMessages(hWnd, dwFlags);
	if (lstMsg == NULL)
		return -1;

	if (szModule == NULL) szModule = "UserInfo";

	int iSelection = 0;
	ptrT tszName(db_get_tsa(hContact, szModule, "TzName"));
	if (tszName != NULL) {
		unsigned hash = mir_hashstrT(tszName);
		for (int i = 0; i < g_timezonesBias.getCount(); i++) {
			if (hash == g_timezonesBias[i]->hash) {
				iSelection = i + 1;
				break;
			}
		}
	}
	else {
		signed char cBias = db_get_b(hContact, szModule, "Timezone", -100);
		if (cBias != -100) {
			int iBias = cBias * 30;
			for (int i = 0; i < g_timezonesBias.getCount(); i++) {
				if (iBias == g_timezonesBias[i]->tzi.Bias) {
					iSelection = i + 1;
					break;
				}
			}
		}
	}

	SendMessage(hWnd, lstMsg->setSel, iSelection, 0);
	return iSelection;
}
Beispiel #2
0
INT_PTR CALLBACK DlgProcPopupActions(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
    static bool windowInitialized = false;
    int i;

    switch (msg) {
    case WM_INITDIALOG:
        windowInitialized = false;

        TranslateDialogDefault(hwnd);

        SendMessage(GetDlgItem(hwnd, IDC_ICO_INFO), STM_SETICON, (WPARAM)IcoLib_GetIcon(ICO_MISC_NOTIFY, 0), 0);

        CheckDlgButton(hwnd, IDC_CHK_ENABLEACTIONS, PopupOptions.actions & ACT_ENABLE ? TRUE : FALSE);
        CheckDlgButton(hwnd, IDC_CHK_IMCONTACTSONLY, PopupOptions.actions & ACT_DEF_IMONLY ? TRUE : FALSE);
        CheckDlgButton(hwnd, IDC_CHK_CONTACTSONLY, PopupOptions.actions & ACT_DEF_NOGLOBAL ? TRUE : FALSE);
        CheckDlgButton(hwnd, IDC_CHK_DONTCLOSE, PopupOptions.actions & ACT_DEF_KEEPWND ? TRUE : FALSE);
        CheckDlgButton(hwnd, IDC_CHK_LARGEICONS, PopupOptions.actions & ACT_LARGE ? TRUE : FALSE);
        CheckDlgButton(hwnd, IDC_RD_TEXT, PopupOptions.actions & ACT_TEXT ? TRUE : FALSE);
        CheckDlgButton(hwnd, IDC_RD_LEFTICONS, PopupOptions.actions & ACT_LEFTICONS ? TRUE : FALSE);
        CheckDlgButton(hwnd, IDC_RD_RIGHTICONS, PopupOptions.actions & ACT_RIGHTICONS ? TRUE : FALSE);

        {
            DWORD dwActiveItem = 0;
            HWND hCombo = GetDlgItem(hwnd, IDC_CB_LEFT);
            dwActiveItem = MouseOverride(hCombo, PopupOptions.overrideLeft);
            SendDlgItemMessage(hwnd, IDC_CB_LEFT, CB_SETCURSEL, dwActiveItem, 0);

            dwActiveItem = 0;
            hCombo = GetDlgItem(hwnd, IDC_CB_MIDDLE);
            dwActiveItem = MouseOverride(hCombo, PopupOptions.overrideMiddle);
            SendDlgItemMessage(hwnd, IDC_CB_MIDDLE, CB_SETCURSEL, dwActiveItem, 0);

            dwActiveItem = 0;
            hCombo = GetDlgItem(hwnd, IDC_CB_RIGHT);
            dwActiveItem = MouseOverride(hCombo, PopupOptions.overrideRight);
            SendDlgItemMessage(hwnd, IDC_CB_RIGHT, CB_SETCURSEL, dwActiveItem, 0);

            HWND hwndList = GetDlgItem(hwnd, IDC_ACTIONS);
            ListView_SetExtendedListViewStyleEx(hwndList, 0, LVS_EX_CHECKBOXES | LVS_EX_LABELTIP);
            HIMAGELIST hImgList = ImageList_Create(16, 16, ILC_MASK | ILC_COLOR32, 10, 1);
            ListView_SetImageList(hwndList, hImgList, LVSIL_SMALL);

            LVCOLUMN column = {0};
            column.mask = LVCF_TEXT | LVCF_WIDTH;
            column.pszText = TranslateT("Action");
            column.cx = 175;
            ListView_InsertColumn(hwndList, 0, &column);

            ListView_EnableGroupView(hwndList, TRUE);

            LIST<char> groups(1, strcmp);

            for (i = 0; i < gActions.getCount(); ++i) {
                char szGroup[64];
                char *szName = strchr(gActions[i]->lpzTitle, '/');
                if (!szName) szName = gActions[i]->lpzTitle;
                else ++szName;
                lstrcpynA(szGroup, gActions[i]->lpzTitle, szName - gActions[i]->lpzTitle);

                int grpId = 0;

                if ((grpId = groups.getIndex(szGroup)) < 0)
                {
                    LVGROUP group = {0};
                    group.cbSize = sizeof(group);
                    group.mask = LVGF_HEADER | LVGF_GROUPID;
                    LPTSTR wszGroup = mir_a2t(szGroup);
                    group.pszHeader = TranslateTS(wszGroup);
                    group.cchHeader = lstrlen(wszGroup);
                    grpId = group.iGroupId = groups.getCount();
                    int grpId = ListView_InsertGroup(hwndList, -1, &group);
                    mir_free(wszGroup);
                    groups.insert(mir_strdup(szGroup), groups.getCount());
                }

                LVITEM item = {0};
                item.mask = LVIF_IMAGE | LVIF_PARAM | LVIF_TEXT | LVIF_STATE | LVIF_INDENT;
                item.iItem = i;
                ptrT tszName(mir_a2t(szName));
                item.pszText = TranslateTS(tszName);
                item.iImage = ImageList_AddIcon(hImgList, gActions[i]->lchIcon);
                item.lParam = i;
                item.mask |= LVIF_GROUPID;
                item.iGroupId = grpId;
                item.iIndent = 0;
                ListView_InsertItem(hwndList, &item);

                ListView_SetItemState(hwndList, i, (gActions[i]->flags & PAF_ENABLED) ? 0x2000 : 0x1000, LVIS_STATEIMAGEMASK);
            }

            BOOL enabled = (PopupOptions.actions & ACT_ENABLE) ? TRUE : FALSE;
            for (i = 0; i < SIZEOF(controls); ++i)
                EnableWindow(GetDlgItem(hwnd, controls[i]), enabled);
        }
        windowInitialized = true;
        break;

    case WM_COMMAND:
        switch (LOWORD(wParam)) {
        case IDC_CHK_ENABLEACTIONS:
            PopupOptions.actions &= ~ACT_ENABLE;
            PopupOptions.actions |= IsDlgButtonChecked(hwnd, IDC_CHK_ENABLEACTIONS) ? ACT_ENABLE : 0;
            SendMessage(GetParent(hwnd), PSM_CHANGED, 0, 0);
            {
                BOOL enabled = (PopupOptions.actions & ACT_ENABLE) ? TRUE : FALSE;
                for (i = 0; i < SIZEOF(controls); ++i)
                    EnableWindow(GetDlgItem(hwnd, controls[i]), enabled);
            }
            break;

        case IDC_CHK_IMCONTACTSONLY:
            PopupOptions.actions &= ~ACT_DEF_IMONLY;
            PopupOptions.actions |= IsDlgButtonChecked(hwnd, IDC_CHK_IMCONTACTSONLY) ? ACT_DEF_IMONLY : 0;
            SendMessage(GetParent(hwnd), PSM_CHANGED, 0, 0);
            break;
        case IDC_CHK_CONTACTSONLY:
            PopupOptions.actions &= ~ACT_DEF_NOGLOBAL;
            PopupOptions.actions |= IsDlgButtonChecked(hwnd, IDC_CHK_CONTACTSONLY) ? ACT_DEF_NOGLOBAL : 0;
            SendMessage(GetParent(hwnd), PSM_CHANGED, 0, 0);
            break;
        case IDC_CHK_DONTCLOSE:
            PopupOptions.actions &= ~ACT_DEF_KEEPWND;
            PopupOptions.actions |= IsDlgButtonChecked(hwnd, IDC_CHK_DONTCLOSE) ? ACT_DEF_KEEPWND : 0;
            SendMessage(GetParent(hwnd), PSM_CHANGED, 0, 0);
            break;
        case IDC_CHK_LARGEICONS:
            PopupOptions.actions &= ~ACT_LARGE;
            PopupOptions.actions |= IsDlgButtonChecked(hwnd, IDC_CHK_LARGEICONS) ? ACT_LARGE : 0;
            SendMessage(GetParent(hwnd), PSM_CHANGED, 0, 0);
            break;
        case IDC_RD_TEXT:
            PopupOptions.actions &= ~(ACT_TEXT | ACT_LEFTICONS | ACT_RIGHTICONS);
            PopupOptions.actions |= IsDlgButtonChecked(hwnd, IDC_CHK_ENABLEACTIONS) ? ACT_TEXT : 0;
            SendMessage(GetParent(hwnd), PSM_CHANGED, 0, 0);
            break;
        case IDC_RD_LEFTICONS:
            PopupOptions.actions &= ~(ACT_TEXT | ACT_LEFTICONS | ACT_RIGHTICONS);
            PopupOptions.actions |= IsDlgButtonChecked(hwnd, IDC_RD_LEFTICONS) ? ACT_LEFTICONS : 0;
            SendMessage(GetParent(hwnd), PSM_CHANGED, 0, 0);
            break;
        case IDC_RD_RIGHTICONS:
            PopupOptions.actions &= ~(ACT_TEXT | ACT_LEFTICONS | ACT_RIGHTICONS);
            PopupOptions.actions |= IsDlgButtonChecked(hwnd, IDC_RD_RIGHTICONS) ? ACT_RIGHTICONS : 0;
            SendMessage(GetParent(hwnd), PSM_CHANGED, 0, 0);
            break;
        case IDC_PREVIEW:
            PopupPreview();
            break;
        case IDC_CB_LEFT:
        case IDC_CB_MIDDLE:
        case IDC_CB_RIGHT:
            PopupOptions.overrideLeft = SendDlgItemMessage(hwnd, IDC_CB_LEFT, CB_GETITEMDATA,
                                        SendDlgItemMessage(hwnd, IDC_CB_LEFT, CB_GETCURSEL, 0, 0), 0);
            PopupOptions.overrideMiddle = SendDlgItemMessage(hwnd, IDC_CB_MIDDLE, CB_GETITEMDATA,
                                          SendDlgItemMessage(hwnd, IDC_CB_MIDDLE, CB_GETCURSEL, 0, 0), 0);
            PopupOptions.overrideRight = SendDlgItemMessage(hwnd, IDC_CB_RIGHT, CB_GETITEMDATA,
                                         SendDlgItemMessage(hwnd, IDC_CB_RIGHT, CB_GETCURSEL, 0, 0), 0);
            if (HIWORD(wParam) == CBN_SELCHANGE)
                SendMessage(GetParent(hwnd), PSM_CHANGED, 0, 0);
        }
        break;

    case WM_NOTIFY:
        switch (((LPNMHDR)lParam)->idFrom) {
        case 0:
            switch (((LPNMHDR)lParam)->code) {
            case PSN_RESET:
                LoadOption_Actions();
                break;

            case PSN_APPLY:
                db_set_dw(NULL, MODULNAME, "Actions", PopupOptions.actions);
                HWND hwndList = GetDlgItem(hwnd, IDC_ACTIONS);

                for (i = 0; i < gActions.getCount(); ++i) {
                    gActions[i]->flags = (ListView_GetItemState(hwndList, i, LVIS_STATEIMAGEMASK) == 0x2000) ? PAF_ENABLED : 0;
                    db_set_b(NULL, "PopupActions", gActions[i]->lpzTitle, (gActions[i]->flags & PAF_ENABLED) ? 1 : 0);
                }

                //overrideActions
                db_set_dw(NULL, MODULNAME, "OverrideLeft", PopupOptions.overrideLeft);
                db_set_dw(NULL, MODULNAME, "OverrideMiddle", PopupOptions.overrideMiddle);
                db_set_dw(NULL, MODULNAME, "OverrideRight", PopupOptions.overrideRight);
            }
            break;

        case IDC_ACTIONS:
            NMLISTVIEW *nmlv = (NMLISTVIEW *)lParam;
            if (windowInitialized && nmlv && nmlv->hdr.code == LVN_ITEMCHANGED && nmlv->uOldState != 0 && (nmlv->uNewState == 0x1000 || nmlv->uNewState == 0x2000))
                SendMessage(GetParent(hwnd), PSM_CHANGED, 0, 0);
        }
    }
    return FALSE;
}