| 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_datetimepicker.h" | 7 #include "xfa/fwl/core/ifwl_datetimepicker.h" |
| 8 | 8 |
| 9 #include "third_party/base/ptr_util.h" | 9 #include "third_party/base/ptr_util.h" |
| 10 #include "xfa/fwl/core/cfwl_message.h" | 10 #include "xfa/fwl/core/cfwl_message.h" |
| (...skipping 13 matching lines...) Expand all Loading... |
| 24 } // namespace | 24 } // namespace |
| 25 | 25 |
| 26 IFWL_DateTimePicker::IFWL_DateTimePicker( | 26 IFWL_DateTimePicker::IFWL_DateTimePicker( |
| 27 const IFWL_App* app, | 27 const IFWL_App* app, |
| 28 std::unique_ptr<CFWL_WidgetProperties> properties) | 28 std::unique_ptr<CFWL_WidgetProperties> properties) |
| 29 : IFWL_Widget(app, std::move(properties), nullptr), | 29 : IFWL_Widget(app, std::move(properties), nullptr), |
| 30 m_iBtnState(1), | 30 m_iBtnState(1), |
| 31 m_iYear(-1), | 31 m_iYear(-1), |
| 32 m_iMonth(-1), | 32 m_iMonth(-1), |
| 33 m_iDay(-1), | 33 m_iDay(-1), |
| 34 m_bLBtnDown(false), | |
| 35 m_iCurYear(2010), | 34 m_iCurYear(2010), |
| 36 m_iCurMonth(3), | 35 m_iCurMonth(3), |
| 37 m_iCurDay(29) { | 36 m_iCurDay(29), |
| 37 m_bLBtnDown(false) { |
| 38 m_rtBtn.Set(0, 0, 0, 0); | 38 m_rtBtn.Set(0, 0, 0, 0); |
| 39 | 39 |
| 40 m_pProperties->m_dwStyleExes = FWL_STYLEEXT_DTP_ShortDateFormat; | 40 m_pProperties->m_dwStyleExes = FWL_STYLEEXT_DTP_ShortDateFormat; |
| 41 | 41 |
| 42 auto monthProp = pdfium::MakeUnique<CFWL_WidgetProperties>(this); | 42 auto monthProp = pdfium::MakeUnique<CFWL_WidgetProperties>(this); |
| 43 monthProp->m_dwStyles = FWL_WGTSTYLE_Popup | FWL_WGTSTYLE_Border; | 43 monthProp->m_dwStyles = FWL_WGTSTYLE_Popup | FWL_WGTSTYLE_Border; |
| 44 monthProp->m_dwStates = FWL_WGTSTATE_Invisible; | 44 monthProp->m_dwStates = FWL_WGTSTATE_Invisible; |
| 45 monthProp->m_pParent = this; | 45 monthProp->m_pParent = this; |
| 46 monthProp->m_pThemeProvider = m_pProperties->m_pThemeProvider; | 46 monthProp->m_pThemeProvider = m_pProperties->m_pThemeProvider; |
| 47 m_pMonthCal.reset( | 47 m_pMonthCal.reset( |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 99 GetThemeCapacity(CFWL_WidgetCapacity::ScrollBarWidth)); | 99 GetThemeCapacity(CFWL_WidgetCapacity::ScrollBarWidth)); |
| 100 if (!pFWidth) | 100 if (!pFWidth) |
| 101 return; | 101 return; |
| 102 FX_FLOAT fBtn = *pFWidth; | 102 FX_FLOAT fBtn = *pFWidth; |
| 103 m_rtBtn.Set(m_rtClient.right() - fBtn, m_rtClient.top, fBtn - 1, | 103 m_rtBtn.Set(m_rtClient.right() - fBtn, m_rtClient.top, fBtn - 1, |
| 104 m_rtClient.height - 1); | 104 m_rtClient.height - 1); |
| 105 CFX_RectF rtEdit; | 105 CFX_RectF rtEdit; |
| 106 rtEdit.Set(m_rtClient.left, m_rtClient.top, m_rtClient.width - fBtn, | 106 rtEdit.Set(m_rtClient.left, m_rtClient.top, m_rtClient.width - fBtn, |
| 107 m_rtClient.height); | 107 m_rtClient.height); |
| 108 m_pEdit->SetWidgetRect(rtEdit); | 108 m_pEdit->SetWidgetRect(rtEdit); |
| 109 ReSetEditAlignment(); | 109 ResetEditAlignment(); |
| 110 m_pEdit->Update(); | 110 m_pEdit->Update(); |
| 111 if (!(m_pMonthCal->GetThemeProvider())) { | 111 if (!(m_pMonthCal->GetThemeProvider())) { |
| 112 m_pMonthCal->SetThemeProvider(m_pProperties->m_pThemeProvider); | 112 m_pMonthCal->SetThemeProvider(m_pProperties->m_pThemeProvider); |
| 113 } | 113 } |
| 114 if (m_pProperties->m_pDataProvider) { | 114 if (m_pProperties->m_pDataProvider) { |
| 115 IFWL_DateTimePickerDP* pData = | 115 IFWL_DateTimePickerDP* pData = |
| 116 static_cast<IFWL_DateTimePickerDP*>(m_pProperties->m_pDataProvider); | 116 static_cast<IFWL_DateTimePickerDP*>(m_pProperties->m_pDataProvider); |
| 117 pData->GetToday(this, m_iCurYear, m_iCurMonth, m_iCurDay); | 117 pData->GetToday(this, m_iCurYear, m_iCurMonth, m_iCurDay); |
| 118 } | 118 } |
| 119 CFX_RectF rtMonthCal; | 119 CFX_RectF rtMonthCal; |
| 120 m_pMonthCal->GetWidgetRect(rtMonthCal, true); | 120 m_pMonthCal->GetWidgetRect(rtMonthCal, true); |
| 121 CFX_RectF rtPopUp; | 121 CFX_RectF rtPopUp; |
| 122 rtPopUp.Set(rtMonthCal.left, rtMonthCal.top + kDateTimePickerHeight, | 122 rtPopUp.Set(rtMonthCal.left, rtMonthCal.top + kDateTimePickerHeight, |
| 123 rtMonthCal.width, rtMonthCal.height); | 123 rtMonthCal.width, rtMonthCal.height); |
| 124 m_pMonthCal->SetWidgetRect(rtPopUp); | 124 m_pMonthCal->SetWidgetRect(rtPopUp); |
| 125 m_pMonthCal->Update(); | 125 m_pMonthCal->Update(); |
| 126 return; | 126 return; |
| 127 } | 127 } |
| 128 | 128 |
| 129 int32_t IFWL_DateTimePicker::CountSelRanges() { | 129 int32_t IFWL_DateTimePicker::CountSelRanges() { |
| 130 return GetDataTimeEdit()->CountSelRanges(); | 130 return m_pEdit->CountSelRanges(); |
| 131 } | 131 } |
| 132 | 132 |
| 133 int32_t IFWL_DateTimePicker::GetSelRange(int32_t nIndex, int32_t& nStart) { | 133 int32_t IFWL_DateTimePicker::GetSelRange(int32_t nIndex, int32_t& nStart) { |
| 134 return GetDataTimeEdit()->GetSelRange(nIndex, nStart); | 134 return m_pEdit->GetSelRange(nIndex, nStart); |
| 135 } | 135 } |
| 136 | 136 |
| 137 FWL_WidgetHit IFWL_DateTimePicker::HitTest(FX_FLOAT fx, FX_FLOAT fy) { | 137 FWL_WidgetHit IFWL_DateTimePicker::HitTest(FX_FLOAT fx, FX_FLOAT fy) { |
| 138 if (m_pWidgetMgr->IsFormDisabled()) | 138 if (m_pWidgetMgr->IsFormDisabled()) |
| 139 return DisForm_HitTest(fx, fy); | 139 return DisForm_HitTest(fx, fy); |
| 140 if (m_rtClient.Contains(fx, fy)) | 140 if (m_rtClient.Contains(fx, fy)) |
| 141 return FWL_WidgetHit::Client; | 141 return FWL_WidgetHit::Client; |
| 142 if (IsMonthCalendarShowed()) { | 142 if (IsMonthCalendarVisible()) { |
| 143 CFX_RectF rect; | 143 CFX_RectF rect; |
| 144 m_pMonthCal->GetWidgetRect(rect); | 144 m_pMonthCal->GetWidgetRect(rect); |
| 145 if (rect.Contains(fx, fy)) | 145 if (rect.Contains(fx, fy)) |
| 146 return FWL_WidgetHit::Client; | 146 return FWL_WidgetHit::Client; |
| 147 } | 147 } |
| 148 return FWL_WidgetHit::Unknown; | 148 return FWL_WidgetHit::Unknown; |
| 149 } | 149 } |
| 150 | 150 |
| 151 void IFWL_DateTimePicker::DrawWidget(CFX_Graphics* pGraphics, | 151 void IFWL_DateTimePicker::DrawWidget(CFX_Graphics* pGraphics, |
| 152 const CFX_Matrix* pMatrix) { | 152 const CFX_Matrix* pMatrix) { |
| (...skipping 15 matching lines...) Expand all Loading... |
| 168 DisForm_DrawWidget(pGraphics, pMatrix); | 168 DisForm_DrawWidget(pGraphics, pMatrix); |
| 169 return; | 169 return; |
| 170 } | 170 } |
| 171 } | 171 } |
| 172 | 172 |
| 173 void IFWL_DateTimePicker::SetThemeProvider(IFWL_ThemeProvider* pTP) { | 173 void IFWL_DateTimePicker::SetThemeProvider(IFWL_ThemeProvider* pTP) { |
| 174 m_pProperties->m_pThemeProvider = pTP; | 174 m_pProperties->m_pThemeProvider = pTP; |
| 175 m_pMonthCal->SetThemeProvider(pTP); | 175 m_pMonthCal->SetThemeProvider(pTP); |
| 176 } | 176 } |
| 177 | 177 |
| 178 FWL_Error IFWL_DateTimePicker::GetCurSel(int32_t& iYear, | 178 void IFWL_DateTimePicker::GetCurSel(int32_t& iYear, |
| 179 int32_t& iMonth, | 179 int32_t& iMonth, |
| 180 int32_t& iDay) { | 180 int32_t& iDay) { |
| 181 iYear = m_iYear; | 181 iYear = m_iYear; |
| 182 iMonth = m_iMonth; | 182 iMonth = m_iMonth; |
| 183 iDay = m_iDay; | 183 iDay = m_iDay; |
| 184 return FWL_Error::Succeeded; | |
| 185 } | 184 } |
| 186 | 185 |
| 187 FWL_Error IFWL_DateTimePicker::SetCurSel(int32_t iYear, | 186 void IFWL_DateTimePicker::SetCurSel(int32_t iYear, |
| 188 int32_t iMonth, | 187 int32_t iMonth, |
| 189 int32_t iDay) { | 188 int32_t iDay) { |
| 190 if (iYear <= 0 || iYear >= 3000) | 189 if (iYear <= 0 || iYear >= 3000) |
| 191 return FWL_Error::Indefinite; | 190 return; |
| 192 if (iMonth <= 0 || iMonth >= 13) | 191 if (iMonth <= 0 || iMonth >= 13) |
| 193 return FWL_Error::Indefinite; | 192 return; |
| 194 if (iDay <= 0 || iDay >= 32) | 193 if (iDay <= 0 || iDay >= 32) |
| 195 return FWL_Error::Indefinite; | 194 return; |
| 195 |
| 196 m_iYear = iYear; | 196 m_iYear = iYear; |
| 197 m_iMonth = iMonth; | 197 m_iMonth = iMonth; |
| 198 m_iDay = iDay; | 198 m_iDay = iDay; |
| 199 m_pMonthCal->SetSelect(iYear, iMonth, iDay); | 199 m_pMonthCal->SetSelect(iYear, iMonth, iDay); |
| 200 return FWL_Error::Succeeded; | |
| 201 } | 200 } |
| 202 | 201 |
| 203 FWL_Error IFWL_DateTimePicker::SetEditText(const CFX_WideString& wsText) { | 202 void IFWL_DateTimePicker::SetEditText(const CFX_WideString& wsText) { |
| 204 if (!m_pEdit) | 203 if (!m_pEdit) |
| 205 return FWL_Error::Indefinite; | 204 return; |
| 206 | 205 |
| 207 m_pEdit->SetText(wsText); | 206 m_pEdit->SetText(wsText); |
| 208 Repaint(&m_rtClient); | 207 Repaint(&m_rtClient); |
| 209 CFWL_Event_DtpEditChanged ev; | 208 CFWL_Event_DtpEditChanged ev; |
| 210 ev.m_wsText = wsText; | 209 ev.m_wsText = wsText; |
| 211 DispatchEvent(&ev); | 210 DispatchEvent(&ev); |
| 212 return FWL_Error::Succeeded; | |
| 213 } | 211 } |
| 214 | 212 |
| 215 FWL_Error IFWL_DateTimePicker::GetEditText(CFX_WideString& wsText, | 213 void IFWL_DateTimePicker::GetEditText(CFX_WideString& wsText, |
| 216 int32_t nStart, | 214 int32_t nStart, |
| 217 int32_t nCount) const { | 215 int32_t nCount) const { |
| 218 if (m_pEdit) { | 216 if (m_pEdit) |
| 219 m_pEdit->GetText(wsText, nStart, nCount); | 217 m_pEdit->GetText(wsText, nStart, nCount); |
| 220 return FWL_Error::Succeeded; | |
| 221 } | |
| 222 return FWL_Error::Indefinite; | |
| 223 } | 218 } |
| 224 | 219 |
| 225 bool IFWL_DateTimePicker::CanUndo() { | 220 void IFWL_DateTimePicker::GetBBox(CFX_RectF& rect) { |
| 226 return m_pEdit->CanUndo(); | |
| 227 } | |
| 228 | |
| 229 bool IFWL_DateTimePicker::CanRedo() { | |
| 230 return m_pEdit->CanRedo(); | |
| 231 } | |
| 232 | |
| 233 bool IFWL_DateTimePicker::Undo() { | |
| 234 return m_pEdit->Undo(); | |
| 235 } | |
| 236 | |
| 237 bool IFWL_DateTimePicker::Redo() { | |
| 238 return m_pEdit->Redo(); | |
| 239 } | |
| 240 | |
| 241 bool IFWL_DateTimePicker::CanCopy() { | |
| 242 int32_t nCount = m_pEdit->CountSelRanges(); | |
| 243 return nCount > 0; | |
| 244 } | |
| 245 | |
| 246 bool IFWL_DateTimePicker::CanCut() { | |
| 247 if (m_pEdit->GetStylesEx() & FWL_STYLEEXT_EDT_ReadOnly) { | |
| 248 return false; | |
| 249 } | |
| 250 int32_t nCount = m_pEdit->CountSelRanges(); | |
| 251 return nCount > 0; | |
| 252 } | |
| 253 | |
| 254 bool IFWL_DateTimePicker::CanSelectAll() { | |
| 255 return m_pEdit->GetTextLength() > 0; | |
| 256 } | |
| 257 | |
| 258 bool IFWL_DateTimePicker::Copy(CFX_WideString& wsCopy) { | |
| 259 return m_pEdit->Copy(wsCopy); | |
| 260 } | |
| 261 | |
| 262 bool IFWL_DateTimePicker::Cut(CFX_WideString& wsCut) { | |
| 263 return m_pEdit->Cut(wsCut); | |
| 264 } | |
| 265 | |
| 266 bool IFWL_DateTimePicker::Paste(const CFX_WideString& wsPaste) { | |
| 267 return m_pEdit->Paste(wsPaste); | |
| 268 } | |
| 269 | |
| 270 bool IFWL_DateTimePicker::SelectAll() { | |
| 271 m_pEdit->AddSelRange(0); | |
| 272 return true; | |
| 273 } | |
| 274 | |
| 275 bool IFWL_DateTimePicker::Delete() { | |
| 276 m_pEdit->ClearText(); | |
| 277 return true; | |
| 278 } | |
| 279 | |
| 280 bool IFWL_DateTimePicker::DeSelect() { | |
| 281 m_pEdit->ClearSelections(); | |
| 282 return true; | |
| 283 } | |
| 284 | |
| 285 FWL_Error IFWL_DateTimePicker::GetBBox(CFX_RectF& rect) { | |
| 286 if (m_pWidgetMgr->IsFormDisabled()) { | 221 if (m_pWidgetMgr->IsFormDisabled()) { |
| 287 return DisForm_GetBBox(rect); | 222 DisForm_GetBBox(rect); |
| 223 return; |
| 288 } | 224 } |
| 289 rect = m_pProperties->m_rtWidget; | 225 rect = m_pProperties->m_rtWidget; |
| 290 if (IsMonthCalendarShowed()) { | 226 if (IsMonthCalendarVisible()) { |
| 291 CFX_RectF rtMonth; | 227 CFX_RectF rtMonth; |
| 292 m_pMonthCal->GetWidgetRect(rtMonth); | 228 m_pMonthCal->GetWidgetRect(rtMonth); |
| 293 rtMonth.Offset(m_pProperties->m_rtWidget.left, | 229 rtMonth.Offset(m_pProperties->m_rtWidget.left, |
| 294 m_pProperties->m_rtWidget.top); | 230 m_pProperties->m_rtWidget.top); |
| 295 rect.Union(rtMonth); | 231 rect.Union(rtMonth); |
| 296 } | 232 } |
| 297 return FWL_Error::Succeeded; | |
| 298 } | 233 } |
| 299 | 234 |
| 300 FWL_Error IFWL_DateTimePicker::SetEditLimit(int32_t nLimit) { | 235 void IFWL_DateTimePicker::SetEditLimit(int32_t nLimit) { |
| 301 m_pEdit->SetLimit(nLimit); | 236 m_pEdit->SetLimit(nLimit); |
| 302 return FWL_Error::Succeeded; | |
| 303 } | 237 } |
| 304 | 238 |
| 305 void IFWL_DateTimePicker::ModifyEditStylesEx(uint32_t dwStylesExAdded, | 239 void IFWL_DateTimePicker::ModifyEditStylesEx(uint32_t dwStylesExAdded, |
| 306 uint32_t dwStylesExRemoved) { | 240 uint32_t dwStylesExRemoved) { |
| 307 m_pEdit->ModifyStylesEx(dwStylesExAdded, dwStylesExRemoved); | 241 m_pEdit->ModifyStylesEx(dwStylesExAdded, dwStylesExRemoved); |
| 308 } | 242 } |
| 309 | 243 |
| 310 void IFWL_DateTimePicker::DrawDropDownButton(CFX_Graphics* pGraphics, | 244 void IFWL_DateTimePicker::DrawDropDownButton(CFX_Graphics* pGraphics, |
| 311 IFWL_ThemeProvider* pTheme, | 245 IFWL_ThemeProvider* pTheme, |
| 312 const CFX_Matrix* pMatrix) { | 246 const CFX_Matrix* pMatrix) { |
| (...skipping 26 matching lines...) Expand all Loading... |
| 339 wsText.Format(L"%d Year %d Month %d Day", iYear, iMonth, iDay); | 273 wsText.Format(L"%d Year %d Month %d Day", iYear, iMonth, iDay); |
| 340 } else if ((m_pProperties->m_dwStyleExes & FWL_STYLEEXT_DTP_TimeFormat) == | 274 } else if ((m_pProperties->m_dwStyleExes & FWL_STYLEEXT_DTP_TimeFormat) == |
| 341 FWL_STYLEEXT_DTP_TimeFormat) { | 275 FWL_STYLEEXT_DTP_TimeFormat) { |
| 342 } | 276 } |
| 343 } | 277 } |
| 344 | 278 |
| 345 void IFWL_DateTimePicker::ShowMonthCalendar(bool bActivate) { | 279 void IFWL_DateTimePicker::ShowMonthCalendar(bool bActivate) { |
| 346 if (m_pWidgetMgr->IsFormDisabled()) { | 280 if (m_pWidgetMgr->IsFormDisabled()) { |
| 347 return DisForm_ShowMonthCalendar(bActivate); | 281 return DisForm_ShowMonthCalendar(bActivate); |
| 348 } | 282 } |
| 349 if (IsMonthCalendarShowed() == bActivate) { | 283 if (IsMonthCalendarVisible() == bActivate) { |
| 350 return; | 284 return; |
| 351 } | 285 } |
| 352 if (!m_pForm) { | 286 if (!m_pForm) { |
| 353 InitProxyForm(); | 287 InitProxyForm(); |
| 354 } | 288 } |
| 355 if (bActivate) { | 289 if (bActivate) { |
| 356 CFX_RectF rtMonth; | 290 CFX_RectF rtMonth; |
| 357 m_pMonthCal->GetWidgetRect(rtMonth); | 291 m_pMonthCal->GetWidgetRect(rtMonth); |
| 358 CFX_RectF rtAnchor; | 292 CFX_RectF rtAnchor; |
| 359 rtAnchor.Set(0, 0, m_pProperties->m_rtWidget.width, | 293 rtAnchor.Set(0, 0, m_pProperties->m_rtWidget.width, |
| 360 m_pProperties->m_rtWidget.height); | 294 m_pProperties->m_rtWidget.height); |
| 361 GetPopupPos(0, rtMonth.height, rtAnchor, rtMonth); | 295 GetPopupPos(0, rtMonth.height, rtAnchor, rtMonth); |
| 362 m_pForm->SetWidgetRect(rtMonth); | 296 m_pForm->SetWidgetRect(rtMonth); |
| 363 rtMonth.left = rtMonth.top = 0; | 297 rtMonth.left = rtMonth.top = 0; |
| 364 m_pMonthCal->SetStates(FWL_WGTSTATE_Invisible, !bActivate); | 298 m_pMonthCal->SetStates(FWL_WGTSTATE_Invisible, !bActivate); |
| 365 m_pMonthCal->SetWidgetRect(rtMonth); | 299 m_pMonthCal->SetWidgetRect(rtMonth); |
| 366 m_pMonthCal->Update(); | 300 m_pMonthCal->Update(); |
| 367 m_pForm->DoModal(); | 301 m_pForm->DoModal(); |
| 368 } else { | 302 } else { |
| 369 m_pForm->EndDoModal(); | 303 m_pForm->EndDoModal(); |
| 370 } | 304 } |
| 371 } | 305 } |
| 372 | 306 |
| 373 bool IFWL_DateTimePicker::IsMonthCalendarShowed() { | 307 bool IFWL_DateTimePicker::IsMonthCalendarVisible() { |
| 374 if (m_pWidgetMgr->IsFormDisabled()) { | 308 if (m_pWidgetMgr->IsFormDisabled()) { |
| 375 return DisForm_IsMonthCalendarShowed(); | 309 return DisForm_IsMonthCalendarVisible(); |
| 376 } | 310 } |
| 377 if (!m_pForm) | 311 if (!m_pForm) |
| 378 return false; | 312 return false; |
| 379 return !(m_pForm->GetStates() & FWL_WGTSTATE_Invisible); | 313 return !(m_pForm->GetStates() & FWL_WGTSTATE_Invisible); |
| 380 } | 314 } |
| 381 | 315 |
| 382 void IFWL_DateTimePicker::ReSetEditAlignment() { | 316 void IFWL_DateTimePicker::ResetEditAlignment() { |
| 383 if (!m_pEdit) | 317 if (!m_pEdit) |
| 384 return; | 318 return; |
| 385 uint32_t dwStylExes = m_pProperties->m_dwStyleExes; | 319 uint32_t dwStylExes = m_pProperties->m_dwStyleExes; |
| 386 uint32_t dwAdd = 0; | 320 uint32_t dwAdd = 0; |
| 387 switch (dwStylExes & FWL_STYLEEXT_DTP_EditHAlignMask) { | 321 switch (dwStylExes & FWL_STYLEEXT_DTP_EditHAlignMask) { |
| 388 case FWL_STYLEEXT_DTP_EditHCenter: { | 322 case FWL_STYLEEXT_DTP_EditHCenter: { |
| 389 dwAdd |= FWL_STYLEEXT_EDT_HCenter; | 323 dwAdd |= FWL_STYLEEXT_EDT_HCenter; |
| 390 break; | 324 break; |
| 391 } | 325 } |
| 392 case FWL_STYLEEXT_DTP_EditHFar: { | 326 case FWL_STYLEEXT_DTP_EditHFar: { |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 445 auto prop = pdfium::MakeUnique<CFWL_WidgetProperties>(); | 379 auto prop = pdfium::MakeUnique<CFWL_WidgetProperties>(); |
| 446 prop->m_dwStyles = FWL_WGTSTYLE_Popup; | 380 prop->m_dwStyles = FWL_WGTSTYLE_Popup; |
| 447 prop->m_dwStates = FWL_WGTSTATE_Invisible; | 381 prop->m_dwStates = FWL_WGTSTATE_Invisible; |
| 448 prop->m_pOwner = this; | 382 prop->m_pOwner = this; |
| 449 | 383 |
| 450 m_pForm.reset( | 384 m_pForm.reset( |
| 451 new IFWL_FormProxy(m_pOwnerApp, std::move(prop), m_pMonthCal.get())); | 385 new IFWL_FormProxy(m_pOwnerApp, std::move(prop), m_pMonthCal.get())); |
| 452 m_pMonthCal->SetParent(m_pForm.get()); | 386 m_pMonthCal->SetParent(m_pForm.get()); |
| 453 } | 387 } |
| 454 | 388 |
| 455 IFWL_DateTimeEdit* IFWL_DateTimePicker::GetDataTimeEdit() { | 389 bool IFWL_DateTimePicker::DisForm_IsMonthCalendarVisible() { |
| 456 return m_pEdit.get(); | |
| 457 } | |
| 458 | |
| 459 FWL_Error IFWL_DateTimePicker::DisForm_Initialize() { | |
| 460 m_pProperties->m_dwStyleExes = FWL_STYLEEXT_DTP_ShortDateFormat; | |
| 461 DisForm_InitMonthCalendar(); | |
| 462 DisForm_InitDateTimeEdit(); | |
| 463 RegisterEventTarget(m_pMonthCal.get()); | |
| 464 RegisterEventTarget(m_pEdit.get()); | |
| 465 return FWL_Error::Succeeded; | |
| 466 } | |
| 467 | |
| 468 void IFWL_DateTimePicker::DisForm_InitMonthCalendar() { | |
| 469 if (m_pMonthCal) | |
| 470 return; | |
| 471 | |
| 472 auto prop = pdfium::MakeUnique<CFWL_WidgetProperties>(this); | |
| 473 prop->m_dwStyles = | |
| 474 FWL_WGTSTYLE_Popup | FWL_WGTSTYLE_Border | FWL_WGTSTYLE_EdgeSunken; | |
| 475 prop->m_dwStates = FWL_WGTSTATE_Invisible; | |
| 476 prop->m_pParent = this; | |
| 477 prop->m_pThemeProvider = m_pProperties->m_pThemeProvider; | |
| 478 | |
| 479 m_pMonthCal.reset(new IFWL_MonthCalendar(m_pOwnerApp, std::move(prop), this)); | |
| 480 CFX_RectF rtMonthCal; | |
| 481 m_pMonthCal->GetWidgetRect(rtMonthCal, true); | |
| 482 rtMonthCal.Set(0, 0, rtMonthCal.width, rtMonthCal.height); | |
| 483 m_pMonthCal->SetWidgetRect(rtMonthCal); | |
| 484 } | |
| 485 | |
| 486 void IFWL_DateTimePicker::DisForm_InitDateTimeEdit() { | |
| 487 if (m_pEdit) | |
| 488 return; | |
| 489 | |
| 490 auto prop = pdfium::MakeUnique<CFWL_WidgetProperties>(); | |
| 491 prop->m_pParent = this; | |
| 492 prop->m_pThemeProvider = m_pProperties->m_pThemeProvider; | |
| 493 | |
| 494 m_pEdit.reset(new IFWL_DateTimeEdit(m_pOwnerApp, std::move(prop), this)); | |
| 495 } | |
| 496 | |
| 497 bool IFWL_DateTimePicker::DisForm_IsMonthCalendarShowed() { | |
| 498 if (!m_pMonthCal) | 390 if (!m_pMonthCal) |
| 499 return false; | 391 return false; |
| 500 return !(m_pMonthCal->GetStates() & FWL_WGTSTATE_Invisible); | 392 return !(m_pMonthCal->GetStates() & FWL_WGTSTATE_Invisible); |
| 501 } | 393 } |
| 502 | 394 |
| 503 void IFWL_DateTimePicker::DisForm_ShowMonthCalendar(bool bActivate) { | 395 void IFWL_DateTimePicker::DisForm_ShowMonthCalendar(bool bActivate) { |
| 504 bool bShowed = IsMonthCalendarShowed(); | 396 bool bShowed = IsMonthCalendarVisible(); |
| 505 if (bShowed == bActivate) { | 397 if (bShowed == bActivate) { |
| 506 return; | 398 return; |
| 507 } | 399 } |
| 508 if (bActivate) { | 400 if (bActivate) { |
| 509 CFX_RectF rtMonthCal; | 401 CFX_RectF rtMonthCal; |
| 510 m_pMonthCal->GetWidgetRect(rtMonthCal, true); | 402 m_pMonthCal->GetWidgetRect(rtMonthCal, true); |
| 511 FX_FLOAT fPopupMin = rtMonthCal.height; | 403 FX_FLOAT fPopupMin = rtMonthCal.height; |
| 512 FX_FLOAT fPopupMax = rtMonthCal.height; | 404 FX_FLOAT fPopupMax = rtMonthCal.height; |
| 513 CFX_RectF rtAnchor(m_pProperties->m_rtWidget); | 405 CFX_RectF rtAnchor(m_pProperties->m_rtWidget); |
| 514 rtAnchor.width = rtMonthCal.width; | 406 rtAnchor.width = rtMonthCal.width; |
| (...skipping 25 matching lines...) Expand all Loading... |
| 540 FWL_WidgetHit IFWL_DateTimePicker::DisForm_HitTest(FX_FLOAT fx, FX_FLOAT fy) { | 432 FWL_WidgetHit IFWL_DateTimePicker::DisForm_HitTest(FX_FLOAT fx, FX_FLOAT fy) { |
| 541 CFX_RectF rect; | 433 CFX_RectF rect; |
| 542 rect.Set(0, 0, m_pProperties->m_rtWidget.width, | 434 rect.Set(0, 0, m_pProperties->m_rtWidget.width, |
| 543 m_pProperties->m_rtWidget.height); | 435 m_pProperties->m_rtWidget.height); |
| 544 if (rect.Contains(fx, fy)) | 436 if (rect.Contains(fx, fy)) |
| 545 return FWL_WidgetHit::Edit; | 437 return FWL_WidgetHit::Edit; |
| 546 if (DisForm_IsNeedShowButton()) | 438 if (DisForm_IsNeedShowButton()) |
| 547 rect.width += m_fBtn; | 439 rect.width += m_fBtn; |
| 548 if (rect.Contains(fx, fy)) | 440 if (rect.Contains(fx, fy)) |
| 549 return FWL_WidgetHit::Client; | 441 return FWL_WidgetHit::Client; |
| 550 if (IsMonthCalendarShowed()) { | 442 if (IsMonthCalendarVisible()) { |
| 551 m_pMonthCal->GetWidgetRect(rect); | 443 m_pMonthCal->GetWidgetRect(rect); |
| 552 if (rect.Contains(fx, fy)) | 444 if (rect.Contains(fx, fy)) |
| 553 return FWL_WidgetHit::Client; | 445 return FWL_WidgetHit::Client; |
| 554 } | 446 } |
| 555 return FWL_WidgetHit::Unknown; | 447 return FWL_WidgetHit::Unknown; |
| 556 } | 448 } |
| 557 | 449 |
| 558 bool IFWL_DateTimePicker::DisForm_IsNeedShowButton() { | 450 bool IFWL_DateTimePicker::DisForm_IsNeedShowButton() { |
| 559 bool bFocus = m_pProperties->m_dwStates & FWL_WGTSTATE_Focused || | 451 bool bFocus = m_pProperties->m_dwStates & FWL_WGTSTATE_Focused || |
| 560 m_pMonthCal->GetStates() & FWL_WGTSTATE_Focused || | 452 m_pMonthCal->GetStates() & FWL_WGTSTATE_Focused || |
| 561 m_pEdit->GetStates() & FWL_WGTSTATE_Focused; | 453 m_pEdit->GetStates() & FWL_WGTSTATE_Focused; |
| 562 return bFocus; | 454 return bFocus; |
| 563 } | 455 } |
| 564 | 456 |
| 565 void IFWL_DateTimePicker::DisForm_Update() { | 457 void IFWL_DateTimePicker::DisForm_Update() { |
| 566 if (m_iLock) | 458 if (m_iLock) |
| 567 return; | 459 return; |
| 568 if (!m_pProperties->m_pThemeProvider) | 460 if (!m_pProperties->m_pThemeProvider) |
| 569 m_pProperties->m_pThemeProvider = GetAvailableTheme(); | 461 m_pProperties->m_pThemeProvider = GetAvailableTheme(); |
| 570 | 462 |
| 571 m_pEdit->SetThemeProvider(m_pProperties->m_pThemeProvider); | 463 m_pEdit->SetThemeProvider(m_pProperties->m_pThemeProvider); |
| 572 GetClientRect(m_rtClient); | 464 GetClientRect(m_rtClient); |
| 573 m_pEdit->SetWidgetRect(m_rtClient); | 465 m_pEdit->SetWidgetRect(m_rtClient); |
| 574 ReSetEditAlignment(); | 466 ResetEditAlignment(); |
| 575 m_pEdit->Update(); | 467 m_pEdit->Update(); |
| 576 if (!m_pMonthCal->GetThemeProvider()) | 468 if (!m_pMonthCal->GetThemeProvider()) |
| 577 m_pMonthCal->SetThemeProvider(m_pProperties->m_pThemeProvider); | 469 m_pMonthCal->SetThemeProvider(m_pProperties->m_pThemeProvider); |
| 578 | 470 |
| 579 if (m_pProperties->m_pDataProvider) { | 471 if (m_pProperties->m_pDataProvider) { |
| 580 IFWL_DateTimePickerDP* pData = | 472 IFWL_DateTimePickerDP* pData = |
| 581 static_cast<IFWL_DateTimePickerDP*>(m_pProperties->m_pDataProvider); | 473 static_cast<IFWL_DateTimePickerDP*>(m_pProperties->m_pDataProvider); |
| 582 pData->GetToday(this, m_iCurYear, m_iCurMonth, m_iCurDay); | 474 pData->GetToday(this, m_iCurYear, m_iCurMonth, m_iCurDay); |
| 583 } | 475 } |
| 584 FX_FLOAT* pWidth = static_cast<FX_FLOAT*>( | 476 FX_FLOAT* pWidth = static_cast<FX_FLOAT*>( |
| (...skipping 12 matching lines...) Expand all Loading... |
| 597 } | 489 } |
| 598 | 490 |
| 599 void IFWL_DateTimePicker::DisForm_GetWidgetRect(CFX_RectF& rect, | 491 void IFWL_DateTimePicker::DisForm_GetWidgetRect(CFX_RectF& rect, |
| 600 bool bAutoSize) { | 492 bool bAutoSize) { |
| 601 rect = m_pProperties->m_rtWidget; | 493 rect = m_pProperties->m_rtWidget; |
| 602 if (DisForm_IsNeedShowButton()) { | 494 if (DisForm_IsNeedShowButton()) { |
| 603 rect.width += m_fBtn; | 495 rect.width += m_fBtn; |
| 604 } | 496 } |
| 605 } | 497 } |
| 606 | 498 |
| 607 FWL_Error IFWL_DateTimePicker::DisForm_GetBBox(CFX_RectF& rect) { | 499 void IFWL_DateTimePicker::DisForm_GetBBox(CFX_RectF& rect) { |
| 608 rect = m_pProperties->m_rtWidget; | 500 rect = m_pProperties->m_rtWidget; |
| 609 if (DisForm_IsNeedShowButton()) { | 501 if (DisForm_IsNeedShowButton()) { |
| 610 rect.width += m_fBtn; | 502 rect.width += m_fBtn; |
| 611 } | 503 } |
| 612 if (IsMonthCalendarShowed()) { | 504 if (IsMonthCalendarVisible()) { |
| 613 CFX_RectF rtMonth; | 505 CFX_RectF rtMonth; |
| 614 m_pMonthCal->GetWidgetRect(rtMonth); | 506 m_pMonthCal->GetWidgetRect(rtMonth); |
| 615 rtMonth.Offset(m_pProperties->m_rtWidget.left, | 507 rtMonth.Offset(m_pProperties->m_rtWidget.left, |
| 616 m_pProperties->m_rtWidget.top); | 508 m_pProperties->m_rtWidget.top); |
| 617 rect.Union(rtMonth); | 509 rect.Union(rtMonth); |
| 618 } | 510 } |
| 619 return FWL_Error::Succeeded; | |
| 620 } | 511 } |
| 621 | 512 |
| 622 void IFWL_DateTimePicker::DisForm_DrawWidget(CFX_Graphics* pGraphics, | 513 void IFWL_DateTimePicker::DisForm_DrawWidget(CFX_Graphics* pGraphics, |
| 623 const CFX_Matrix* pMatrix) { | 514 const CFX_Matrix* pMatrix) { |
| 624 if (!pGraphics) | 515 if (!pGraphics) |
| 625 return; | 516 return; |
| 626 if (m_pEdit) { | 517 if (m_pEdit) { |
| 627 CFX_RectF rtEdit; | 518 CFX_RectF rtEdit; |
| 628 m_pEdit->GetWidgetRect(rtEdit); | 519 m_pEdit->GetWidgetRect(rtEdit); |
| 629 CFX_Matrix mt; | 520 CFX_Matrix mt; |
| 630 mt.Set(1, 0, 0, 1, rtEdit.left, rtEdit.top); | 521 mt.Set(1, 0, 0, 1, rtEdit.left, rtEdit.top); |
| 631 if (pMatrix) { | 522 if (pMatrix) { |
| 632 mt.Concat(*pMatrix); | 523 mt.Concat(*pMatrix); |
| 633 } | 524 } |
| 634 m_pEdit->DrawWidget(pGraphics, &mt); | 525 m_pEdit->DrawWidget(pGraphics, &mt); |
| 635 } | 526 } |
| 636 if (IsMonthCalendarShowed()) { | 527 if (IsMonthCalendarVisible()) { |
| 637 CFX_RectF rtMonth; | 528 CFX_RectF rtMonth; |
| 638 m_pMonthCal->GetWidgetRect(rtMonth); | 529 m_pMonthCal->GetWidgetRect(rtMonth); |
| 639 CFX_Matrix mt; | 530 CFX_Matrix mt; |
| 640 mt.Set(1, 0, 0, 1, rtMonth.left, rtMonth.top); | 531 mt.Set(1, 0, 0, 1, rtMonth.left, rtMonth.top); |
| 641 if (pMatrix) { | 532 if (pMatrix) { |
| 642 mt.Concat(*pMatrix); | 533 mt.Concat(*pMatrix); |
| 643 } | 534 } |
| 644 m_pMonthCal->DrawWidget(pGraphics, &mt); | 535 m_pMonthCal->DrawWidget(pGraphics, &mt); |
| 645 } | 536 } |
| 646 return; | 537 return; |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 702 if (m_pWidgetMgr->IsFormDisabled()) | 593 if (m_pWidgetMgr->IsFormDisabled()) |
| 703 return DisForm_OnFocusChanged(pMsg, bSet); | 594 return DisForm_OnFocusChanged(pMsg, bSet); |
| 704 | 595 |
| 705 if (bSet) { | 596 if (bSet) { |
| 706 m_pProperties->m_dwStates |= (FWL_WGTSTATE_Focused); | 597 m_pProperties->m_dwStates |= (FWL_WGTSTATE_Focused); |
| 707 Repaint(&m_rtClient); | 598 Repaint(&m_rtClient); |
| 708 } else { | 599 } else { |
| 709 m_pProperties->m_dwStates &= ~(FWL_WGTSTATE_Focused); | 600 m_pProperties->m_dwStates &= ~(FWL_WGTSTATE_Focused); |
| 710 Repaint(&m_rtClient); | 601 Repaint(&m_rtClient); |
| 711 } | 602 } |
| 712 if (pMsg->m_pSrcTarget == m_pMonthCal.get() && IsMonthCalendarShowed()) { | 603 if (pMsg->m_pSrcTarget == m_pMonthCal.get() && IsMonthCalendarVisible()) { |
| 713 ShowMonthCalendar(false); | 604 ShowMonthCalendar(false); |
| 714 } | 605 } |
| 715 Repaint(&m_rtClient); | 606 Repaint(&m_rtClient); |
| 716 } | 607 } |
| 717 | 608 |
| 718 void IFWL_DateTimePicker::OnLButtonDown(CFWL_MsgMouse* pMsg) { | 609 void IFWL_DateTimePicker::OnLButtonDown(CFWL_MsgMouse* pMsg) { |
| 719 if (!pMsg) | 610 if (!pMsg) |
| 720 return; | 611 return; |
| 721 if ((m_pProperties->m_dwStates & FWL_WGTSTATE_Focused) == 0) | 612 if ((m_pProperties->m_dwStates & FWL_WGTSTATE_Focused) == 0) |
| 722 SetFocus(true); | 613 SetFocus(true); |
| 723 if (m_rtBtn.Contains(pMsg->m_fx, pMsg->m_fy)) { | 614 if (m_rtBtn.Contains(pMsg->m_fx, pMsg->m_fy)) { |
| 724 if (IsMonthCalendarShowed()) { | 615 if (IsMonthCalendarVisible()) { |
| 725 ShowMonthCalendar(false); | 616 ShowMonthCalendar(false); |
| 726 CFWL_Event_DtpCloseUp ev; | 617 CFWL_Event_DtpCloseUp ev; |
| 727 DispatchEvent(&ev); | 618 DispatchEvent(&ev); |
| 728 } else { | 619 } else { |
| 729 if (!(m_pProperties->m_dwStyleExes & FWL_STYLEEXT_DTP_TimeFormat)) { | 620 if (!(m_pProperties->m_dwStyleExes & FWL_STYLEEXT_DTP_TimeFormat)) { |
| 730 ShowMonthCalendar(true); | 621 ShowMonthCalendar(true); |
| 731 CFWL_Event_DtpDropDown ev; | 622 CFWL_Event_DtpDropDown ev; |
| 732 DispatchEvent(&ev); | 623 DispatchEvent(&ev); |
| 733 } | 624 } |
| 734 m_bLBtnDown = true; | 625 m_bLBtnDown = true; |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 771 if (m_pEdit && !(m_pEdit->GetStylesEx() & FWL_STYLEEXT_EDT_ReadOnly)) { | 662 if (m_pEdit && !(m_pEdit->GetStylesEx() & FWL_STYLEEXT_EDT_ReadOnly)) { |
| 772 m_rtBtn.Set(m_pProperties->m_rtWidget.width, 0, m_fBtn, | 663 m_rtBtn.Set(m_pProperties->m_rtWidget.width, 0, m_fBtn, |
| 773 m_pProperties->m_rtWidget.height - 1); | 664 m_pProperties->m_rtWidget.height - 1); |
| 774 } | 665 } |
| 775 rtInvalidate = m_rtBtn; | 666 rtInvalidate = m_rtBtn; |
| 776 pMsg->m_pDstTarget = m_pEdit.get(); | 667 pMsg->m_pDstTarget = m_pEdit.get(); |
| 777 m_pEdit->GetDelegate()->OnProcessMessage(pMsg); | 668 m_pEdit->GetDelegate()->OnProcessMessage(pMsg); |
| 778 } else { | 669 } else { |
| 779 m_pProperties->m_dwStates &= ~FWL_WGTSTATE_Focused; | 670 m_pProperties->m_dwStates &= ~FWL_WGTSTATE_Focused; |
| 780 m_rtBtn.Set(0, 0, 0, 0); | 671 m_rtBtn.Set(0, 0, 0, 0); |
| 781 if (DisForm_IsMonthCalendarShowed()) | 672 if (DisForm_IsMonthCalendarVisible()) |
| 782 ShowMonthCalendar(false); | 673 ShowMonthCalendar(false); |
| 783 if (m_pEdit->GetStates() & FWL_WGTSTATE_Focused) { | 674 if (m_pEdit->GetStates() & FWL_WGTSTATE_Focused) { |
| 784 pMsg->m_pSrcTarget = m_pEdit.get(); | 675 pMsg->m_pSrcTarget = m_pEdit.get(); |
| 785 m_pEdit->GetDelegate()->OnProcessMessage(pMsg); | 676 m_pEdit->GetDelegate()->OnProcessMessage(pMsg); |
| 786 } | 677 } |
| 787 } | 678 } |
| 788 rtInvalidate.Inflate(2, 2); | 679 rtInvalidate.Inflate(2, 2); |
| 789 Repaint(&rtInvalidate); | 680 Repaint(&rtInvalidate); |
| 790 } | 681 } |
| 791 | 682 |
| 792 FWL_Error IFWL_DateTimePicker::GetCaption(IFWL_Widget* pWidget, | 683 void IFWL_DateTimePicker::GetCaption(IFWL_Widget* pWidget, |
| 793 CFX_WideString& wsCaption) { | 684 CFX_WideString& wsCaption) {} |
| 794 return FWL_Error::Succeeded; | |
| 795 } | |
| 796 | 685 |
| 797 int32_t IFWL_DateTimePicker::GetCurDay(IFWL_Widget* pWidget) { | 686 int32_t IFWL_DateTimePicker::GetCurDay(IFWL_Widget* pWidget) { |
| 798 return m_iCurDay; | 687 return m_iCurDay; |
| 799 } | 688 } |
| 800 | 689 |
| 801 int32_t IFWL_DateTimePicker::GetCurMonth(IFWL_Widget* pWidget) { | 690 int32_t IFWL_DateTimePicker::GetCurMonth(IFWL_Widget* pWidget) { |
| 802 return m_iCurMonth; | 691 return m_iCurMonth; |
| 803 } | 692 } |
| 804 | 693 |
| 805 int32_t IFWL_DateTimePicker::GetCurYear(IFWL_Widget* pWidget) { | 694 int32_t IFWL_DateTimePicker::GetCurYear(IFWL_Widget* pWidget) { |
| 806 return m_iCurYear; | 695 return m_iCurYear; |
| 807 } | 696 } |
| OLD | NEW |