| OLD | NEW |
| 1 // Copyright 2014 PDFium Authors. All rights reserved. | 1 // Copyright 2014 PDFium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com | 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |
| 6 | 6 |
| 7 #include "xfa/fwl/core/ifwl_monthcalendar.h" | 7 #include "xfa/fwl/core/ifwl_monthcalendar.h" |
| 8 | 8 |
| 9 #include <algorithm> | 9 #include <algorithm> |
| 10 | 10 |
| (...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 139 m_rtLBtn.Reset(); | 139 m_rtLBtn.Reset(); |
| 140 m_rtRBtn.Reset(); | 140 m_rtRBtn.Reset(); |
| 141 m_rtDates.Reset(); | 141 m_rtDates.Reset(); |
| 142 m_rtHSep.Reset(); | 142 m_rtHSep.Reset(); |
| 143 m_rtHeadText.Reset(); | 143 m_rtHeadText.Reset(); |
| 144 m_rtToday.Reset(); | 144 m_rtToday.Reset(); |
| 145 m_rtTodayFlag.Reset(); | 145 m_rtTodayFlag.Reset(); |
| 146 m_rtClient.Reset(); | 146 m_rtClient.Reset(); |
| 147 m_rtWeekNum.Reset(); | 147 m_rtWeekNum.Reset(); |
| 148 m_rtWeekNumSep.Reset(); | 148 m_rtWeekNumSep.Reset(); |
| 149 | |
| 150 SetDelegate(pdfium::MakeUnique<CFWL_MonthCalendarImpDelegate>(this)); | |
| 151 } | 149 } |
| 152 | 150 |
| 153 IFWL_MonthCalendar::~IFWL_MonthCalendar() { | 151 IFWL_MonthCalendar::~IFWL_MonthCalendar() { |
| 154 ClearDateItem(); | 152 ClearDateItem(); |
| 155 m_arrSelDays.RemoveAll(); | 153 m_arrSelDays.RemoveAll(); |
| 156 } | 154 } |
| 157 | 155 |
| 158 FWL_Type IFWL_MonthCalendar::GetClassID() const { | 156 FWL_Type IFWL_MonthCalendar::GetClassID() const { |
| 159 return FWL_Type::MonthCalendar; | 157 return FWL_Type::MonthCalendar; |
| 160 } | 158 } |
| (...skipping 847 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1008 if (iDay <= 0 || iDay > m_arrDates.GetSize()) { | 1006 if (iDay <= 0 || iDay > m_arrDates.GetSize()) { |
| 1009 return FALSE; | 1007 return FALSE; |
| 1010 } | 1008 } |
| 1011 FWL_DATEINFO* pDateInfo = m_arrDates[iDay - 1]; | 1009 FWL_DATEINFO* pDateInfo = m_arrDates[iDay - 1]; |
| 1012 if (!pDateInfo) | 1010 if (!pDateInfo) |
| 1013 return FALSE; | 1011 return FALSE; |
| 1014 rtDay = pDateInfo->rect; | 1012 rtDay = pDateInfo->rect; |
| 1015 return TRUE; | 1013 return TRUE; |
| 1016 } | 1014 } |
| 1017 | 1015 |
| 1018 CFWL_MonthCalendarImpDelegate::CFWL_MonthCalendarImpDelegate( | 1016 void IFWL_MonthCalendar::OnProcessMessage(CFWL_Message* pMessage) { |
| 1019 IFWL_MonthCalendar* pOwner) | |
| 1020 : m_pOwner(pOwner) {} | |
| 1021 | |
| 1022 void CFWL_MonthCalendarImpDelegate::OnProcessMessage(CFWL_Message* pMessage) { | |
| 1023 if (!pMessage) | 1017 if (!pMessage) |
| 1024 return; | 1018 return; |
| 1025 | 1019 |
| 1026 CFWL_MessageType dwMsgCode = pMessage->GetClassID(); | 1020 CFWL_MessageType dwMsgCode = pMessage->GetClassID(); |
| 1027 switch (dwMsgCode) { | 1021 switch (dwMsgCode) { |
| 1028 case CFWL_MessageType::SetFocus: { | 1022 case CFWL_MessageType::SetFocus: |
| 1029 OnFocusChanged(pMessage, TRUE); | 1023 OnFocusChanged(pMessage, TRUE); |
| 1030 break; | 1024 break; |
| 1031 } | 1025 case CFWL_MessageType::KillFocus: |
| 1032 case CFWL_MessageType::KillFocus: { | |
| 1033 OnFocusChanged(pMessage, FALSE); | 1026 OnFocusChanged(pMessage, FALSE); |
| 1034 break; | 1027 break; |
| 1035 } | 1028 case CFWL_MessageType::Key: |
| 1036 case CFWL_MessageType::Key: { | |
| 1037 break; | 1029 break; |
| 1038 } | |
| 1039 case CFWL_MessageType::Mouse: { | 1030 case CFWL_MessageType::Mouse: { |
| 1040 CFWL_MsgMouse* pMouse = static_cast<CFWL_MsgMouse*>(pMessage); | 1031 CFWL_MsgMouse* pMouse = static_cast<CFWL_MsgMouse*>(pMessage); |
| 1041 switch (pMouse->m_dwCmd) { | 1032 switch (pMouse->m_dwCmd) { |
| 1042 case FWL_MouseCommand::LeftButtonDown: { | 1033 case FWL_MouseCommand::LeftButtonDown: |
| 1043 OnLButtonDown(pMouse); | 1034 OnLButtonDown(pMouse); |
| 1044 break; | 1035 break; |
| 1045 } | 1036 case FWL_MouseCommand::LeftButtonUp: |
| 1046 case FWL_MouseCommand::LeftButtonUp: { | |
| 1047 OnLButtonUp(pMouse); | 1037 OnLButtonUp(pMouse); |
| 1048 break; | 1038 break; |
| 1049 } | 1039 case FWL_MouseCommand::Move: |
| 1050 case FWL_MouseCommand::Move: { | |
| 1051 OnMouseMove(pMouse); | 1040 OnMouseMove(pMouse); |
| 1052 break; | 1041 break; |
| 1053 } | 1042 case FWL_MouseCommand::Leave: |
| 1054 case FWL_MouseCommand::Leave: { | |
| 1055 OnMouseLeave(pMouse); | 1043 OnMouseLeave(pMouse); |
| 1056 break; | 1044 break; |
| 1057 } | |
| 1058 default: | 1045 default: |
| 1059 break; | 1046 break; |
| 1060 } | 1047 } |
| 1061 break; | 1048 break; |
| 1062 } | 1049 } |
| 1063 default: { break; } | 1050 default: |
| 1051 break; |
| 1064 } | 1052 } |
| 1065 CFWL_WidgetImpDelegate::OnProcessMessage(pMessage); | 1053 IFWL_Widget::OnProcessMessage(pMessage); |
| 1066 } | 1054 } |
| 1067 | 1055 |
| 1068 void CFWL_MonthCalendarImpDelegate::OnDrawWidget(CFX_Graphics* pGraphics, | 1056 void IFWL_MonthCalendar::OnDrawWidget(CFX_Graphics* pGraphics, |
| 1069 const CFX_Matrix* pMatrix) { | 1057 const CFX_Matrix* pMatrix) { |
| 1070 m_pOwner->DrawWidget(pGraphics, pMatrix); | 1058 DrawWidget(pGraphics, pMatrix); |
| 1071 } | 1059 } |
| 1072 | 1060 |
| 1073 void CFWL_MonthCalendarImpDelegate::OnActivate(CFWL_Message* pMsg) {} | 1061 void IFWL_MonthCalendar::OnFocusChanged(CFWL_Message* pMsg, FX_BOOL bSet) { |
| 1062 if (bSet) |
| 1063 m_pProperties->m_dwStates |= FWL_WGTSTATE_Focused; |
| 1064 else |
| 1065 m_pProperties->m_dwStates &= ~FWL_WGTSTATE_Focused; |
| 1074 | 1066 |
| 1075 void CFWL_MonthCalendarImpDelegate::OnFocusChanged(CFWL_Message* pMsg, | 1067 Repaint(&m_rtClient); |
| 1076 FX_BOOL bSet) { | |
| 1077 if (bSet) { | |
| 1078 m_pOwner->m_pProperties->m_dwStates |= FWL_WGTSTATE_Focused; | |
| 1079 } else { | |
| 1080 m_pOwner->m_pProperties->m_dwStates &= ~FWL_WGTSTATE_Focused; | |
| 1081 } | |
| 1082 m_pOwner->Repaint(&m_pOwner->m_rtClient); | |
| 1083 } | 1068 } |
| 1084 | 1069 |
| 1085 void CFWL_MonthCalendarImpDelegate::OnLButtonDown(CFWL_MsgMouse* pMsg) { | 1070 void IFWL_MonthCalendar::OnLButtonDown(CFWL_MsgMouse* pMsg) { |
| 1086 if (m_pOwner->m_rtLBtn.Contains(pMsg->m_fx, pMsg->m_fy)) { | 1071 if (m_rtLBtn.Contains(pMsg->m_fx, pMsg->m_fy)) { |
| 1087 m_pOwner->m_iLBtnPartStates = CFWL_PartState_Pressed; | 1072 m_iLBtnPartStates = CFWL_PartState_Pressed; |
| 1088 m_pOwner->PrevMonth(); | 1073 PrevMonth(); |
| 1089 m_pOwner->Repaint(&m_pOwner->m_rtClient); | 1074 Repaint(&m_rtClient); |
| 1090 } else if (m_pOwner->m_rtRBtn.Contains(pMsg->m_fx, pMsg->m_fy)) { | 1075 } else if (m_rtRBtn.Contains(pMsg->m_fx, pMsg->m_fy)) { |
| 1091 m_pOwner->m_iRBtnPartStates |= CFWL_PartState_Pressed; | 1076 m_iRBtnPartStates |= CFWL_PartState_Pressed; |
| 1092 m_pOwner->NextMonth(); | 1077 NextMonth(); |
| 1093 m_pOwner->Repaint(&m_pOwner->m_rtClient); | 1078 Repaint(&m_rtClient); |
| 1094 } else if (m_pOwner->m_rtToday.Contains(pMsg->m_fx, pMsg->m_fy)) { | 1079 } else if (m_rtToday.Contains(pMsg->m_fx, pMsg->m_fy)) { |
| 1095 if ((m_pOwner->m_pProperties->m_dwStyleExes & FWL_STYLEEXT_MCD_NoToday) == | 1080 if ((m_pProperties->m_dwStyleExes & FWL_STYLEEXT_MCD_NoToday) == 0) { |
| 1096 0) { | 1081 JumpToToday(); |
| 1097 m_pOwner->JumpToToday(); | 1082 Repaint(&m_rtClient); |
| 1098 m_pOwner->Repaint(&m_pOwner->m_rtClient); | |
| 1099 } | 1083 } |
| 1100 } else { | 1084 } else { |
| 1101 if (m_pOwner->m_pProperties->m_dwStyleExes & FWL_STYLEEXT_MCD_MultiSelect) { | 1085 if (!(m_pProperties->m_dwStyleExes & FWL_STYLEEXT_MCD_MultiSelect)) { |
| 1102 } else { | |
| 1103 int32_t iOldSel = 0; | 1086 int32_t iOldSel = 0; |
| 1104 if (m_pOwner->m_arrSelDays.GetSize() > 0) { | 1087 if (m_arrSelDays.GetSize() <= 0) |
| 1105 iOldSel = m_pOwner->m_arrSelDays[0]; | |
| 1106 } else { | |
| 1107 return; | 1088 return; |
| 1108 } | 1089 iOldSel = m_arrSelDays[0]; |
| 1109 int32_t iCurSel = m_pOwner->GetDayAtPoint(pMsg->m_fx, pMsg->m_fy); | 1090 |
| 1091 int32_t iCurSel = GetDayAtPoint(pMsg->m_fx, pMsg->m_fy); |
| 1110 FX_BOOL bSelChanged = iCurSel > 0 && iCurSel != iOldSel; | 1092 FX_BOOL bSelChanged = iCurSel > 0 && iCurSel != iOldSel; |
| 1111 if (bSelChanged) { | 1093 if (bSelChanged) { |
| 1112 FWL_DATEINFO* lpDatesInfo = m_pOwner->m_arrDates.GetAt(iCurSel - 1); | 1094 FWL_DATEINFO* lpDatesInfo = m_arrDates.GetAt(iCurSel - 1); |
| 1113 CFX_RectF rtInvalidate(lpDatesInfo->rect); | 1095 CFX_RectF rtInvalidate(lpDatesInfo->rect); |
| 1114 if (iOldSel > 0) { | 1096 if (iOldSel > 0) { |
| 1115 lpDatesInfo = m_pOwner->m_arrDates.GetAt(iOldSel - 1); | 1097 lpDatesInfo = m_arrDates.GetAt(iOldSel - 1); |
| 1116 rtInvalidate.Union(lpDatesInfo->rect); | 1098 rtInvalidate.Union(lpDatesInfo->rect); |
| 1117 } | 1099 } |
| 1118 m_pOwner->AddSelDay(iCurSel); | 1100 AddSelDay(iCurSel); |
| 1119 CFWL_EvtClick wmClick; | 1101 CFWL_EvtClick wmClick; |
| 1120 wmClick.m_pSrcTarget = m_pOwner; | 1102 wmClick.m_pSrcTarget = this; |
| 1121 m_pOwner->DispatchEvent(&wmClick); | 1103 DispatchEvent(&wmClick); |
| 1122 CFWL_EventMcdDateChanged wmDateSelected; | 1104 CFWL_EventMcdDateChanged wmDateSelected; |
| 1123 wmDateSelected.m_iStartDay = iCurSel; | 1105 wmDateSelected.m_iStartDay = iCurSel; |
| 1124 wmDateSelected.m_iEndDay = iCurSel; | 1106 wmDateSelected.m_iEndDay = iCurSel; |
| 1125 wmDateSelected.m_iOldMonth = m_pOwner->m_iCurMonth; | 1107 wmDateSelected.m_iOldMonth = m_iCurMonth; |
| 1126 wmDateSelected.m_iOldYear = m_pOwner->m_iCurYear; | 1108 wmDateSelected.m_iOldYear = m_iCurYear; |
| 1127 wmDateSelected.m_pSrcTarget = m_pOwner; | 1109 wmDateSelected.m_pSrcTarget = this; |
| 1128 m_pOwner->DispatchEvent(&wmDateSelected); | 1110 DispatchEvent(&wmDateSelected); |
| 1129 m_pOwner->Repaint(&rtInvalidate); | 1111 Repaint(&rtInvalidate); |
| 1130 } | 1112 } |
| 1131 } | 1113 } |
| 1132 } | 1114 } |
| 1133 } | 1115 } |
| 1134 | 1116 |
| 1135 void CFWL_MonthCalendarImpDelegate::OnLButtonUp(CFWL_MsgMouse* pMsg) { | 1117 void IFWL_MonthCalendar::OnLButtonUp(CFWL_MsgMouse* pMsg) { |
| 1136 if (m_pOwner->m_rtLBtn.Contains(pMsg->m_fx, pMsg->m_fy)) { | 1118 if (m_rtLBtn.Contains(pMsg->m_fx, pMsg->m_fy)) { |
| 1137 m_pOwner->m_iLBtnPartStates = 0; | 1119 m_iLBtnPartStates = 0; |
| 1138 m_pOwner->Repaint(&m_pOwner->m_rtLBtn); | 1120 Repaint(&m_rtLBtn); |
| 1139 } else if (m_pOwner->m_rtRBtn.Contains(pMsg->m_fx, pMsg->m_fy)) { | 1121 } else if (m_rtRBtn.Contains(pMsg->m_fx, pMsg->m_fy)) { |
| 1140 m_pOwner->m_iRBtnPartStates = 0; | 1122 m_iRBtnPartStates = 0; |
| 1141 m_pOwner->Repaint(&m_pOwner->m_rtRBtn); | 1123 Repaint(&m_rtRBtn); |
| 1142 } else if (m_pOwner->m_rtDates.Contains(pMsg->m_fx, pMsg->m_fy)) { | 1124 } else if (m_rtDates.Contains(pMsg->m_fx, pMsg->m_fy)) { |
| 1143 int32_t iDay = m_pOwner->GetDayAtPoint(pMsg->m_fx, pMsg->m_fy); | 1125 int32_t iDay = GetDayAtPoint(pMsg->m_fx, pMsg->m_fy); |
| 1144 if (iDay != -1) { | 1126 if (iDay != -1) |
| 1145 m_pOwner->AddSelDay(iDay); | 1127 AddSelDay(iDay); |
| 1146 } | |
| 1147 } | 1128 } |
| 1148 } | 1129 } |
| 1149 | 1130 |
| 1150 void CFWL_MonthCalendarImpDelegate::OnMouseMove(CFWL_MsgMouse* pMsg) { | 1131 void IFWL_MonthCalendar::OnMouseMove(CFWL_MsgMouse* pMsg) { |
| 1151 if (m_pOwner->m_pProperties->m_dwStyleExes & FWL_STYLEEXT_MCD_MultiSelect) { | 1132 if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_MCD_MultiSelect) |
| 1152 return; | 1133 return; |
| 1153 } | 1134 |
| 1154 FX_BOOL bRepaint = FALSE; | 1135 FX_BOOL bRepaint = FALSE; |
| 1155 CFX_RectF rtInvalidate; | 1136 CFX_RectF rtInvalidate; |
| 1156 rtInvalidate.Set(0, 0, 0, 0); | 1137 rtInvalidate.Set(0, 0, 0, 0); |
| 1157 if (m_pOwner->m_rtDates.Contains(pMsg->m_fx, pMsg->m_fy)) { | 1138 if (m_rtDates.Contains(pMsg->m_fx, pMsg->m_fy)) { |
| 1158 int32_t iHover = m_pOwner->GetDayAtPoint(pMsg->m_fx, pMsg->m_fy); | 1139 int32_t iHover = GetDayAtPoint(pMsg->m_fx, pMsg->m_fy); |
| 1159 bRepaint = m_pOwner->m_iHovered != iHover; | 1140 bRepaint = m_iHovered != iHover; |
| 1160 if (bRepaint) { | 1141 if (bRepaint) { |
| 1161 if (m_pOwner->m_iHovered > 0) { | 1142 if (m_iHovered > 0) |
| 1162 m_pOwner->GetDayRect(m_pOwner->m_iHovered, rtInvalidate); | 1143 GetDayRect(m_iHovered, rtInvalidate); |
| 1163 } | |
| 1164 if (iHover > 0) { | 1144 if (iHover > 0) { |
| 1165 CFX_RectF rtDay; | 1145 CFX_RectF rtDay; |
| 1166 m_pOwner->GetDayRect(iHover, rtDay); | 1146 GetDayRect(iHover, rtDay); |
| 1167 if (rtInvalidate.IsEmpty()) { | 1147 if (rtInvalidate.IsEmpty()) |
| 1168 rtInvalidate = rtDay; | 1148 rtInvalidate = rtDay; |
| 1169 } else { | 1149 else |
| 1170 rtInvalidate.Union(rtDay); | 1150 rtInvalidate.Union(rtDay); |
| 1171 } | |
| 1172 } | 1151 } |
| 1173 } | 1152 } |
| 1174 m_pOwner->m_iHovered = iHover; | 1153 m_iHovered = iHover; |
| 1175 } else { | 1154 } else { |
| 1176 bRepaint = m_pOwner->m_iHovered > 0; | 1155 bRepaint = m_iHovered > 0; |
| 1177 if (bRepaint) { | 1156 if (bRepaint) |
| 1178 m_pOwner->GetDayRect(m_pOwner->m_iHovered, rtInvalidate); | 1157 GetDayRect(m_iHovered, rtInvalidate); |
| 1179 } | 1158 |
| 1180 m_pOwner->m_iHovered = -1; | 1159 m_iHovered = -1; |
| 1181 } | 1160 } |
| 1182 if (bRepaint && !rtInvalidate.IsEmpty()) { | 1161 if (bRepaint && !rtInvalidate.IsEmpty()) |
| 1183 m_pOwner->Repaint(&rtInvalidate); | 1162 Repaint(&rtInvalidate); |
| 1184 } | |
| 1185 } | 1163 } |
| 1186 | 1164 |
| 1187 void CFWL_MonthCalendarImpDelegate::OnMouseLeave(CFWL_MsgMouse* pMsg) { | 1165 void IFWL_MonthCalendar::OnMouseLeave(CFWL_MsgMouse* pMsg) { |
| 1188 if (m_pOwner->m_iHovered > 0) { | 1166 if (m_iHovered <= 0) |
| 1189 CFX_RectF rtInvalidate; | 1167 return; |
| 1190 rtInvalidate.Set(0, 0, 0, 0); | 1168 |
| 1191 m_pOwner->GetDayRect(m_pOwner->m_iHovered, rtInvalidate); | 1169 CFX_RectF rtInvalidate; |
| 1192 m_pOwner->m_iHovered = -1; | 1170 rtInvalidate.Set(0, 0, 0, 0); |
| 1193 if (!rtInvalidate.IsEmpty()) { | 1171 GetDayRect(m_iHovered, rtInvalidate); |
| 1194 m_pOwner->Repaint(&rtInvalidate); | 1172 m_iHovered = -1; |
| 1195 } | 1173 if (!rtInvalidate.IsEmpty()) |
| 1196 } | 1174 Repaint(&rtInvalidate); |
| 1197 } | 1175 } |
| 1198 | 1176 |
| 1199 FWL_DATEINFO::FWL_DATEINFO(int32_t day, | 1177 FWL_DATEINFO::FWL_DATEINFO(int32_t day, |
| 1200 int32_t dayofweek, | 1178 int32_t dayofweek, |
| 1201 uint32_t dwSt, | 1179 uint32_t dwSt, |
| 1202 CFX_RectF rc, | 1180 CFX_RectF rc, |
| 1203 CFX_WideString& wsday) | 1181 CFX_WideString& wsday) |
| 1204 : iDay(day), | 1182 : iDay(day), |
| 1205 iDayOfWeek(dayofweek), | 1183 iDayOfWeek(dayofweek), |
| 1206 dwStates(dwSt), | 1184 dwStates(dwSt), |
| 1207 rect(rc), | 1185 rect(rc), |
| 1208 wsDay(wsday) {} | 1186 wsDay(wsday) {} |
| 1209 | 1187 |
| 1210 FWL_DATEINFO::~FWL_DATEINFO() {} | 1188 FWL_DATEINFO::~FWL_DATEINFO() {} |
| OLD | NEW |