diff options
Diffstat (limited to 'xfa/fwl/core/ifwl_datetimecalendar.cpp')
-rw-r--r-- | xfa/fwl/core/ifwl_datetimecalendar.cpp | 188 |
1 files changed, 84 insertions, 104 deletions
diff --git a/xfa/fwl/core/ifwl_datetimecalendar.cpp b/xfa/fwl/core/ifwl_datetimecalendar.cpp index a44b558190..f521c56fb7 100644 --- a/xfa/fwl/core/ifwl_datetimecalendar.cpp +++ b/xfa/fwl/core/ifwl_datetimecalendar.cpp @@ -15,23 +15,14 @@ IFWL_DateTimeCalendar::IFWL_DateTimeCalendar( const IFWL_App* app, const CFWL_WidgetImpProperties& properties, IFWL_Widget* pOuter) - : IFWL_MonthCalendar(app, properties, pOuter) { - SetDelegate(pdfium::MakeUnique<CFWL_DateTimeCalendarImpDelegate>(this)); -} - -CFWL_DateTimeCalendarImpDelegate::CFWL_DateTimeCalendarImpDelegate( - IFWL_DateTimeCalendar* pOwner) - : CFWL_MonthCalendarImpDelegate(pOwner), m_pOwner(pOwner) { - m_bFlag = FALSE; -} + : IFWL_MonthCalendar(app, properties, pOuter), m_bFlag(FALSE) {} -void CFWL_DateTimeCalendarImpDelegate::OnProcessMessage( - CFWL_Message* pMessage) { +void IFWL_DateTimeCalendar::OnProcessMessage(CFWL_Message* pMessage) { CFWL_MessageType dwCode = pMessage->GetClassID(); if (dwCode == CFWL_MessageType::SetFocus || dwCode == CFWL_MessageType::KillFocus) { - IFWL_Widget* pOuter = m_pOwner->GetOuter(); - pOuter->GetCurrentDelegate()->OnProcessMessage(pMessage); + IFWL_Widget* pOuter = GetOuter(); + pOuter->GetDelegate()->OnProcessMessage(pMessage); return; } if (dwCode == CFWL_MessageType::Mouse) { @@ -42,72 +33,67 @@ void CFWL_DateTimeCalendarImpDelegate::OnProcessMessage( OnLButtonUpEx(pMsg); return; } - CFWL_MonthCalendarImpDelegate::OnProcessMessage(pMessage); + IFWL_MonthCalendar::OnProcessMessage(pMessage); } -void CFWL_DateTimeCalendarImpDelegate::OnLButtonDownEx(CFWL_MsgMouse* pMsg) { - if (m_pOwner->m_rtLBtn.Contains(pMsg->m_fx, pMsg->m_fy)) { - m_pOwner->m_iLBtnPartStates = CFWL_PartState_Pressed; - m_pOwner->PrevMonth(); - m_pOwner->Repaint(&m_pOwner->m_rtClient); - } else if (m_pOwner->m_rtRBtn.Contains(pMsg->m_fx, pMsg->m_fy)) { - m_pOwner->m_iRBtnPartStates |= CFWL_PartState_Pressed; - m_pOwner->NextMonth(); - m_pOwner->Repaint(&m_pOwner->m_rtClient); - } else if (m_pOwner->m_rtToday.Contains(pMsg->m_fx, pMsg->m_fy)) { - if ((m_pOwner->m_pProperties->m_dwStyleExes & FWL_STYLEEXT_MCD_NoToday) == - 0) { - m_pOwner->JumpToToday(); - m_pOwner->Repaint(&m_pOwner->m_rtClient); +void IFWL_DateTimeCalendar::OnLButtonDownEx(CFWL_MsgMouse* pMsg) { + if (m_rtLBtn.Contains(pMsg->m_fx, pMsg->m_fy)) { + m_iLBtnPartStates = CFWL_PartState_Pressed; + PrevMonth(); + Repaint(&m_rtClient); + } else if (m_rtRBtn.Contains(pMsg->m_fx, pMsg->m_fy)) { + m_iRBtnPartStates |= CFWL_PartState_Pressed; + NextMonth(); + Repaint(&m_rtClient); + } else if (m_rtToday.Contains(pMsg->m_fx, pMsg->m_fy)) { + if ((m_pProperties->m_dwStyleExes & FWL_STYLEEXT_MCD_NoToday) == 0) { + JumpToToday(); + Repaint(&m_rtClient); } } else { - IFWL_DateTimePicker* pIPicker = - static_cast<IFWL_DateTimePicker*>(m_pOwner->m_pOuter); - if (pIPicker->IsMonthCalendarShowed()) { + IFWL_DateTimePicker* pIPicker = static_cast<IFWL_DateTimePicker*>(m_pOuter); + if (pIPicker->IsMonthCalendarShowed()) m_bFlag = 1; - } } } -void CFWL_DateTimeCalendarImpDelegate::OnLButtonUpEx(CFWL_MsgMouse* pMsg) { - if (m_pOwner->m_pWidgetMgr->IsFormDisabled()) { +void IFWL_DateTimeCalendar::OnLButtonUpEx(CFWL_MsgMouse* pMsg) { + if (m_pWidgetMgr->IsFormDisabled()) return DisForm_OnLButtonUpEx(pMsg); - } - if (m_pOwner->m_rtLBtn.Contains(pMsg->m_fx, pMsg->m_fy)) { - m_pOwner->m_iLBtnPartStates = 0; - m_pOwner->Repaint(&m_pOwner->m_rtLBtn); + if (m_rtLBtn.Contains(pMsg->m_fx, pMsg->m_fy)) { + m_iLBtnPartStates = 0; + Repaint(&m_rtLBtn); return; } - if (m_pOwner->m_rtRBtn.Contains(pMsg->m_fx, pMsg->m_fy)) { - m_pOwner->m_iRBtnPartStates = 0; - m_pOwner->Repaint(&m_pOwner->m_rtRBtn); + if (m_rtRBtn.Contains(pMsg->m_fx, pMsg->m_fy)) { + m_iRBtnPartStates = 0; + Repaint(&m_rtRBtn); return; } - if (m_pOwner->m_rtToday.Contains(pMsg->m_fx, pMsg->m_fy)) { + if (m_rtToday.Contains(pMsg->m_fx, pMsg->m_fy)) return; - } + int32_t iOldSel = 0; - if (m_pOwner->m_arrSelDays.GetSize() > 0) { - iOldSel = m_pOwner->m_arrSelDays[0]; - } - int32_t iCurSel = m_pOwner->GetDayAtPoint(pMsg->m_fx, pMsg->m_fy); + 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_pOwner->m_pOuter); - pIPicker->m_pForm->GetWidgetRect(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_pOwner->m_arrDates.GetAt(iCurSel - 1); + FWL_DATEINFO* lpDatesInfo = m_arrDates.GetAt(iCurSel - 1); CFX_RectF rtInvalidate(lpDatesInfo->rect); - if (iOldSel > 0 && iOldSel <= m_pOwner->m_arrDates.GetSize()) { - lpDatesInfo = m_pOwner->m_arrDates.GetAt(iOldSel - 1); + if (iOldSel > 0 && iOldSel <= m_arrDates.GetSize()) { + lpDatesInfo = m_arrDates.GetAt(iOldSel - 1); rtInvalidate.Union(lpDatesInfo->rect); } - m_pOwner->AddSelDay(iCurSel); - if (!m_pOwner->m_pOuter) + AddSelDay(iCurSel); + if (!m_pOuter) return; - pIPicker->ProcessSelChanged(m_pOwner->m_iCurYear, m_pOwner->m_iCurMonth, - iCurSel); + + 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); @@ -115,48 +101,44 @@ void CFWL_DateTimeCalendarImpDelegate::OnLButtonUpEx(CFWL_MsgMouse* pMsg) { m_bFlag = 0; } -void CFWL_DateTimeCalendarImpDelegate::OnMouseMoveEx(CFWL_MsgMouse* pMsg) { - if (m_pOwner->m_pProperties->m_dwStyleExes & FWL_STYLEEXT_MCD_MultiSelect) { +void IFWL_DateTimeCalendar::OnMouseMoveEx(CFWL_MsgMouse* pMsg) { + if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_MCD_MultiSelect) return; - } + FX_BOOL bRepaint = FALSE; CFX_RectF rtInvalidate; rtInvalidate.Set(0, 0, 0, 0); - if (m_pOwner->m_rtDates.Contains(pMsg->m_fx, pMsg->m_fy)) { - int32_t iHover = m_pOwner->GetDayAtPoint(pMsg->m_fx, pMsg->m_fy); - bRepaint = m_pOwner->m_iHovered != iHover; + if (m_rtDates.Contains(pMsg->m_fx, pMsg->m_fy)) { + int32_t iHover = GetDayAtPoint(pMsg->m_fx, pMsg->m_fy); + bRepaint = m_iHovered != iHover; if (bRepaint) { - if (m_pOwner->m_iHovered > 0) { - m_pOwner->GetDayRect(m_pOwner->m_iHovered, rtInvalidate); - } + if (m_iHovered > 0) + GetDayRect(m_iHovered, rtInvalidate); if (iHover > 0) { CFX_RectF rtDay; - m_pOwner->GetDayRect(iHover, rtDay); - if (rtInvalidate.IsEmpty()) { + GetDayRect(iHover, rtDay); + if (rtInvalidate.IsEmpty()) rtInvalidate = rtDay; - } else { + else rtInvalidate.Union(rtDay); - } } } - m_pOwner->m_iHovered = iHover; + m_iHovered = iHover; CFWL_Event_DtpHoverChanged ev; ev.hoverday = iHover; - m_pOwner->DispatchEvent(&ev); + DispatchEvent(&ev); } else { - bRepaint = m_pOwner->m_iHovered > 0; - if (bRepaint) { - m_pOwner->GetDayRect(m_pOwner->m_iHovered, rtInvalidate); - } - m_pOwner->m_iHovered = -1; - } - if (bRepaint && !rtInvalidate.IsEmpty()) { - m_pOwner->Repaint(&rtInvalidate); + bRepaint = m_iHovered > 0; + if (bRepaint) + GetDayRect(m_iHovered, rtInvalidate); + + m_iHovered = -1; } + if (bRepaint && !rtInvalidate.IsEmpty()) + Repaint(&rtInvalidate); } -void CFWL_DateTimeCalendarImpDelegate::DisForm_OnProcessMessage( - CFWL_Message* pMessage) { +void IFWL_DateTimeCalendar::DisForm_OnProcessMessage(CFWL_Message* pMessage) { if (pMessage->GetClassID() == CFWL_MessageType::Mouse) { CFWL_MsgMouse* pMsg = static_cast<CFWL_MsgMouse*>(pMessage); if (pMsg->m_dwCmd == FWL_MouseCommand::LeftButtonUp) { @@ -164,41 +146,39 @@ void CFWL_DateTimeCalendarImpDelegate::DisForm_OnProcessMessage( return; } } - CFWL_MonthCalendarImpDelegate::OnProcessMessage(pMessage); + IFWL_MonthCalendar::OnProcessMessage(pMessage); } -void CFWL_DateTimeCalendarImpDelegate::DisForm_OnLButtonUpEx( - CFWL_MsgMouse* pMsg) { - if (m_pOwner->m_rtLBtn.Contains(pMsg->m_fx, pMsg->m_fy)) { - m_pOwner->m_iLBtnPartStates = 0; - m_pOwner->Repaint(&(m_pOwner->m_rtLBtn)); +void IFWL_DateTimeCalendar::DisForm_OnLButtonUpEx(CFWL_MsgMouse* pMsg) { + if (m_rtLBtn.Contains(pMsg->m_fx, pMsg->m_fy)) { + m_iLBtnPartStates = 0; + Repaint(&(m_rtLBtn)); return; } - if (m_pOwner->m_rtRBtn.Contains(pMsg->m_fx, pMsg->m_fy)) { - m_pOwner->m_iRBtnPartStates = 0; - m_pOwner->Repaint(&(m_pOwner->m_rtRBtn)); + if (m_rtRBtn.Contains(pMsg->m_fx, pMsg->m_fy)) { + m_iRBtnPartStates = 0; + Repaint(&(m_rtRBtn)); return; } - if (m_pOwner->m_rtToday.Contains(pMsg->m_fx, pMsg->m_fy)) { + if (m_rtToday.Contains(pMsg->m_fx, pMsg->m_fy)) return; - } + int32_t iOldSel = 0; - if (m_pOwner->m_arrSelDays.GetSize() > 0) { - iOldSel = m_pOwner->m_arrSelDays[0]; - } - int32_t iCurSel = m_pOwner->GetDayAtPoint(pMsg->m_fx, pMsg->m_fy); + 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_pOwner->m_arrDates.GetAt(iCurSel - 1); + FWL_DATEINFO* lpDatesInfo = m_arrDates.GetAt(iCurSel - 1); CFX_RectF rtInvalidate(lpDatesInfo->rect); - if (iOldSel > 0 && iOldSel <= m_pOwner->m_arrDates.GetSize()) { - lpDatesInfo = m_pOwner->m_arrDates.GetAt(iOldSel - 1); + if (iOldSel > 0 && iOldSel <= m_arrDates.GetSize()) { + lpDatesInfo = m_arrDates.GetAt(iOldSel - 1); rtInvalidate.Union(lpDatesInfo->rect); } - m_pOwner->AddSelDay(iCurSel); + AddSelDay(iCurSel); IFWL_DateTimePicker* pDateTime = - static_cast<IFWL_DateTimePicker*>(m_pOwner->m_pOuter); - pDateTime->ProcessSelChanged(m_pOwner->m_iCurYear, m_pOwner->m_iCurMonth, - iCurSel); + static_cast<IFWL_DateTimePicker*>(m_pOuter); + pDateTime->ProcessSelChanged(m_iCurYear, m_iCurMonth, iCurSel); pDateTime->ShowMonthCalendar(FALSE); } } |