- next/prev month don't stick anymore

- min/max ranges initialized to some reasonable values
- fixed some bugs caused by reversed order of arguments of MONTHCAL_CopyTime
- update current month/year after setting current date
- changing months etc doesn't send MCN_SELECT (which could be sent
  only after a particular day was clicked)
- changed (hit && MCHT_CALENDARDATE) to (hit == MCHT_CALENDARDATE)
This commit is contained in:
Krzysztof Foltman 2004-04-21 22:24:09 +00:00 committed by Alexandre Julliard
parent 3ae8f73caf
commit c401aa84eb
1 changed files with 31 additions and 23 deletions

View File

@ -948,7 +948,7 @@ static LRESULT
MONTHCAL_SetRange(HWND hwnd, WPARAM wParam, LPARAM lParam)
{
MONTHCAL_INFO *infoPtr = MONTHCAL_GetInfoPtr(hwnd);
SYSTEMTIME lprgSysTimeArray[1];
SYSTEMTIME *lprgSysTimeArray=(SYSTEMTIME *)lParam;
int prev;
TRACE("%x %lx\n", wParam, lParam);
@ -1033,6 +1033,7 @@ MONTHCAL_GetCurSel(HWND hwnd, WPARAM wParam, LPARAM lParam)
if(GetWindowLongA(hwnd, GWL_STYLE) & MCS_MULTISELECT) return FALSE;
MONTHCAL_CopyTime(&infoPtr->minSel, lpSel);
TRACE("%d/%d/%d\n", lpSel->wYear, lpSel->wMonth, lpSel->wDay);
return TRUE;
}
@ -1048,7 +1049,8 @@ MONTHCAL_SetCurSel(HWND hwnd, WPARAM wParam, LPARAM lParam)
if((infoPtr==NULL) ||(lpSel==NULL)) return FALSE;
if(GetWindowLongA(hwnd, GWL_STYLE) & MCS_MULTISELECT) return FALSE;
TRACE("%d %d\n", lpSel->wMonth, lpSel->wDay);
infoPtr->currentMonth=lpSel->wMonth;
infoPtr->currentYear=lpSel->wYear;
MONTHCAL_CopyTime(lpSel, &infoPtr->minSel);
MONTHCAL_CopyTime(lpSel, &infoPtr->maxSel);
@ -1479,23 +1481,24 @@ MONTHCAL_LButtonDown(HWND hwnd, WPARAM wParam, LPARAM lParam)
InvalidateRect(hwnd, NULL, FALSE);
return TRUE;
}
if(hit && MCHT_CALENDARDATE) {
if(hit == MCHT_CALENDARDATE) {
SYSTEMTIME selArray[2];
NMSELCHANGE nmsc;
TRACE("MCHT_CALENDARDATE\n");
nmsc.nmhdr.hwndFrom = hwnd;
nmsc.nmhdr.idFrom = GetWindowLongA(hwnd, GWL_ID);
nmsc.nmhdr.code = MCN_SELCHANGE;
MONTHCAL_CopyTime(&nmsc.stSelStart, &infoPtr->minSel);
MONTHCAL_CopyTime(&nmsc.stSelEnd, &infoPtr->maxSel);
SendMessageA(infoPtr->hwndNotify, WM_NOTIFY,
(WPARAM)nmsc.nmhdr.idFrom,(LPARAM)&nmsc);
MONTHCAL_CopyTime(&ht.st, &selArray[0]);
MONTHCAL_CopyTime(&ht.st, &selArray[1]);
MONTHCAL_SetSelRange(hwnd,0,(LPARAM) &selArray);
MONTHCAL_SetCurSel(hwnd,0,(LPARAM) &selArray);
TRACE("MCHT_CALENDARDATE\n");
nmsc.nmhdr.hwndFrom = hwnd;
nmsc.nmhdr.idFrom = GetWindowLongA(hwnd, GWL_ID);
nmsc.nmhdr.code = MCN_SELCHANGE;
MONTHCAL_CopyTime(&infoPtr->minSel,&nmsc.stSelStart);
MONTHCAL_CopyTime(&infoPtr->maxSel,&nmsc.stSelEnd);
SendMessageA(infoPtr->hwndNotify, WM_NOTIFY,
(WPARAM)nmsc.nmhdr.idFrom,(LPARAM)&nmsc);
/* redraw both old and new days if the selected day changed */
if(infoPtr->curSelDay != ht.st.wDay) {
@ -1530,10 +1533,12 @@ MONTHCAL_LButtonUp(HWND hwnd, WPARAM wParam, LPARAM lParam)
if(infoPtr->status & MC_NEXTPRESSED) {
KillTimer(hwnd, MC_NEXTMONTHTIMER);
infoPtr->status &= ~MC_NEXTPRESSED;
redraw = TRUE;
}
if(infoPtr->status & MC_PREVPRESSED) {
KillTimer(hwnd, MC_PREVMONTHTIMER);
infoPtr->status &= ~MC_PREVPRESSED;
redraw = TRUE;
}
@ -1560,20 +1565,21 @@ MONTHCAL_LButtonUp(HWND hwnd, WPARAM wParam, LPARAM lParam)
SendMessageA(infoPtr->hwndNotify, WM_NOTIFY,
(WPARAM)nmhdr.idFrom, (LPARAM)&nmhdr);
nmsc.nmhdr.hwndFrom = hwnd;
nmsc.nmhdr.idFrom = GetWindowLongA(hwnd, GWL_ID);
nmsc.nmhdr.code = MCN_SELECT;
MONTHCAL_CopyTime(&nmsc.stSelStart, &infoPtr->minSel);
MONTHCAL_CopyTime(&nmsc.stSelEnd, &infoPtr->maxSel);
SendMessageA(infoPtr->hwndNotify, WM_NOTIFY,
(WPARAM)nmsc.nmhdr.idFrom, (LPARAM)&nmsc);
/* redraw if necessary */
if(redraw)
InvalidateRect(hwnd, NULL, FALSE);
/* only send MCN_SELECT if currently displayed month's day was selected */
if(hit == MCHT_CALENDARDATE) {
nmsc.nmhdr.hwndFrom = hwnd;
nmsc.nmhdr.idFrom = GetWindowLongA(hwnd, GWL_ID);
nmsc.nmhdr.code = MCN_SELECT;
MONTHCAL_CopyTime(&infoPtr->minSel, &nmsc.stSelStart);
MONTHCAL_CopyTime(&infoPtr->maxSel, &nmsc.stSelEnd);
SendMessageA(infoPtr->hwndNotify, WM_NOTIFY,
(WPARAM)nmsc.nmhdr.idFrom, (LPARAM)&nmsc);
}
return 0;
}
@ -1898,6 +1904,8 @@ MONTHCAL_Create(HWND hwnd, WPARAM wParam, LPARAM lParam)
infoPtr->currentYear = infoPtr->todaysDate.wYear;
MONTHCAL_CopyTime(&infoPtr->todaysDate, &infoPtr->minDate);
MONTHCAL_CopyTime(&infoPtr->todaysDate, &infoPtr->maxDate);
infoPtr->maxDate.wYear=2050;
infoPtr->minDate.wYear=1950;
infoPtr->maxSelCount = 7;
infoPtr->monthRange = 3;
infoPtr->monthdayState = Alloc