| Index: xfa/fwl/core/ifwl_monthcalendar.cpp
|
| diff --git a/xfa/fwl/core/ifwl_monthcalendar.cpp b/xfa/fwl/core/ifwl_monthcalendar.cpp
|
| index 7351e7e29a7a0d0b191f3103f6a38b23e9e70e01..dcc66fe677af3d774762a87560e84b13c78b4f9f 100644
|
| --- a/xfa/fwl/core/ifwl_monthcalendar.cpp
|
| +++ b/xfa/fwl/core/ifwl_monthcalendar.cpp
|
| @@ -14,6 +14,8 @@
|
| #include "xfa/fwl/core/cfwl_themebackground.h"
|
| #include "xfa/fwl/core/cfwl_themetext.h"
|
| #include "xfa/fwl/core/fwl_noteimp.h"
|
| +#include "xfa/fwl/core/ifwl_datetimepicker.h"
|
| +#include "xfa/fwl/core/ifwl_formproxy.h"
|
| #include "xfa/fwl/core/ifwl_monthcalendar.h"
|
| #include "xfa/fwl/core/ifwl_themeprovider.h"
|
|
|
| @@ -133,7 +135,8 @@ IFWL_MonthCalendar::IFWL_MonthCalendar(
|
| m_iHovered(-1),
|
| m_iLBtnPartStates(CFWL_PartState_Normal),
|
| m_iRBtnPartStates(CFWL_PartState_Normal),
|
| - m_iMaxSel(1) {
|
| + m_iMaxSel(1),
|
| + m_bFlag(false) {
|
| m_rtHead.Reset();
|
| m_rtWeek.Reset();
|
| m_rtLBtn.Reset();
|
| @@ -1016,10 +1019,8 @@ void IFWL_MonthCalendar::OnProcessMessage(CFWL_Message* pMessage) {
|
| CFWL_MessageType dwMsgCode = pMessage->GetClassID();
|
| switch (dwMsgCode) {
|
| case CFWL_MessageType::SetFocus:
|
| - OnFocusChanged(pMessage, true);
|
| - break;
|
| case CFWL_MessageType::KillFocus:
|
| - OnFocusChanged(pMessage, false);
|
| + GetOuter()->GetDelegate()->OnProcessMessage(pMessage);
|
| break;
|
| case CFWL_MessageType::Key:
|
| break;
|
| @@ -1054,15 +1055,6 @@ void IFWL_MonthCalendar::OnDrawWidget(CFX_Graphics* pGraphics,
|
| DrawWidget(pGraphics, pMatrix);
|
| }
|
|
|
| -void IFWL_MonthCalendar::OnFocusChanged(CFWL_Message* pMsg, bool bSet) {
|
| - if (bSet)
|
| - m_pProperties->m_dwStates |= FWL_WGTSTATE_Focused;
|
| - else
|
| - m_pProperties->m_dwStates &= ~FWL_WGTSTATE_Focused;
|
| -
|
| - Repaint(&m_rtClient);
|
| -}
|
| -
|
| void IFWL_MonthCalendar::OnLButtonDown(CFWL_MsgMouse* pMsg) {
|
| if (m_rtLBtn.Contains(pMsg->m_fx, pMsg->m_fy)) {
|
| m_iLBtnPartStates = CFWL_PartState_Pressed;
|
| @@ -1078,49 +1070,88 @@ void IFWL_MonthCalendar::OnLButtonDown(CFWL_MsgMouse* pMsg) {
|
| Repaint(&m_rtClient);
|
| }
|
| } else {
|
| - if (!(m_pProperties->m_dwStyleExes & FWL_STYLEEXT_MCD_MultiSelect)) {
|
| - int32_t iOldSel = 0;
|
| - if (m_arrSelDays.GetSize() <= 0)
|
| - return;
|
| - iOldSel = m_arrSelDays[0];
|
| -
|
| - int32_t iCurSel = GetDayAtPoint(pMsg->m_fx, pMsg->m_fy);
|
| - bool bSelChanged = iCurSel > 0 && iCurSel != iOldSel;
|
| - if (bSelChanged) {
|
| - FWL_DATEINFO* lpDatesInfo = m_arrDates.GetAt(iCurSel - 1);
|
| - CFX_RectF rtInvalidate(lpDatesInfo->rect);
|
| - if (iOldSel > 0) {
|
| - lpDatesInfo = m_arrDates.GetAt(iOldSel - 1);
|
| - rtInvalidate.Union(lpDatesInfo->rect);
|
| - }
|
| - AddSelDay(iCurSel);
|
| - CFWL_EvtClick wmClick;
|
| - wmClick.m_pSrcTarget = this;
|
| - DispatchEvent(&wmClick);
|
| - CFWL_EventMcdDateChanged wmDateSelected;
|
| - wmDateSelected.m_iStartDay = iCurSel;
|
| - wmDateSelected.m_iEndDay = iCurSel;
|
| - wmDateSelected.m_iOldMonth = m_iCurMonth;
|
| - wmDateSelected.m_iOldYear = m_iCurYear;
|
| - wmDateSelected.m_pSrcTarget = this;
|
| - DispatchEvent(&wmDateSelected);
|
| - Repaint(&rtInvalidate);
|
| - }
|
| - }
|
| + IFWL_DateTimePicker* pIPicker = static_cast<IFWL_DateTimePicker*>(m_pOuter);
|
| + if (pIPicker->IsMonthCalendarShowed())
|
| + m_bFlag = 1;
|
| }
|
| }
|
|
|
| void IFWL_MonthCalendar::OnLButtonUp(CFWL_MsgMouse* pMsg) {
|
| + if (m_pWidgetMgr->IsFormDisabled())
|
| + return DisForm_OnLButtonUp(pMsg);
|
| +
|
| if (m_rtLBtn.Contains(pMsg->m_fx, pMsg->m_fy)) {
|
| m_iLBtnPartStates = 0;
|
| Repaint(&m_rtLBtn);
|
| - } else if (m_rtRBtn.Contains(pMsg->m_fx, pMsg->m_fy)) {
|
| + return;
|
| + }
|
| + if (m_rtRBtn.Contains(pMsg->m_fx, pMsg->m_fy)) {
|
| m_iRBtnPartStates = 0;
|
| Repaint(&m_rtRBtn);
|
| - } else if (m_rtDates.Contains(pMsg->m_fx, pMsg->m_fy)) {
|
| - int32_t iDay = GetDayAtPoint(pMsg->m_fx, pMsg->m_fy);
|
| - if (iDay != -1)
|
| - AddSelDay(iDay);
|
| + return;
|
| + }
|
| + if (m_rtToday.Contains(pMsg->m_fx, pMsg->m_fy))
|
| + return;
|
| +
|
| + int32_t iOldSel = 0;
|
| + if (m_arrSelDays.GetSize() > 0)
|
| + iOldSel = m_arrSelDays[0];
|
| +
|
| + int32_t iCurSel = GetDayAtPoint(pMsg->m_fx, pMsg->m_fy);
|
| + CFX_RectF rt;
|
| + IFWL_DateTimePicker* pIPicker = static_cast<IFWL_DateTimePicker*>(m_pOuter);
|
| + pIPicker->GetFormProxy()->GetWidgetRect(rt);
|
| + rt.Set(0, 0, rt.width, rt.height);
|
| + if (iCurSel > 0) {
|
| + FWL_DATEINFO* lpDatesInfo = m_arrDates.GetAt(iCurSel - 1);
|
| + CFX_RectF rtInvalidate(lpDatesInfo->rect);
|
| + if (iOldSel > 0 && iOldSel <= m_arrDates.GetSize()) {
|
| + lpDatesInfo = m_arrDates.GetAt(iOldSel - 1);
|
| + rtInvalidate.Union(lpDatesInfo->rect);
|
| + }
|
| + AddSelDay(iCurSel);
|
| + if (!m_pOuter)
|
| + return;
|
| +
|
| + pIPicker->ProcessSelChanged(m_iCurYear, m_iCurMonth, iCurSel);
|
| + pIPicker->ShowMonthCalendar(false);
|
| + } else if (m_bFlag && (!rt.Contains(pMsg->m_fx, pMsg->m_fy))) {
|
| + pIPicker->ShowMonthCalendar(false);
|
| + }
|
| + m_bFlag = 0;
|
| +}
|
| +
|
| +void IFWL_MonthCalendar::DisForm_OnLButtonUp(CFWL_MsgMouse* pMsg) {
|
| + if (m_rtLBtn.Contains(pMsg->m_fx, pMsg->m_fy)) {
|
| + m_iLBtnPartStates = 0;
|
| + Repaint(&(m_rtLBtn));
|
| + return;
|
| + }
|
| + if (m_rtRBtn.Contains(pMsg->m_fx, pMsg->m_fy)) {
|
| + m_iRBtnPartStates = 0;
|
| + Repaint(&(m_rtRBtn));
|
| + return;
|
| + }
|
| + if (m_rtToday.Contains(pMsg->m_fx, pMsg->m_fy))
|
| + return;
|
| +
|
| + int32_t iOldSel = 0;
|
| + if (m_arrSelDays.GetSize() > 0)
|
| + iOldSel = m_arrSelDays[0];
|
| +
|
| + int32_t iCurSel = GetDayAtPoint(pMsg->m_fx, pMsg->m_fy);
|
| + if (iCurSel > 0) {
|
| + FWL_DATEINFO* lpDatesInfo = m_arrDates.GetAt(iCurSel - 1);
|
| + CFX_RectF rtInvalidate(lpDatesInfo->rect);
|
| + if (iOldSel > 0 && iOldSel <= m_arrDates.GetSize()) {
|
| + lpDatesInfo = m_arrDates.GetAt(iOldSel - 1);
|
| + rtInvalidate.Union(lpDatesInfo->rect);
|
| + }
|
| + AddSelDay(iCurSel);
|
| + IFWL_DateTimePicker* pDateTime =
|
| + static_cast<IFWL_DateTimePicker*>(m_pOuter);
|
| + pDateTime->ProcessSelChanged(m_iCurYear, m_iCurMonth, iCurSel);
|
| + pDateTime->ShowMonthCalendar(false);
|
| }
|
| }
|
|
|
|
|